标签:des style blog http 使用 os io 文件
前面写一了篇,UITextField Category来限制输入的字数,是有个Bug的,要输入中文时会crash。现在修改 了下,代码如下
.h文件
#import <UIKit/UIKit.h> @interface UITextField (LimitLength) /** * 使用时只要调用此方法,加上一个长度(int),就可以实现了字数限制,汉字不可以 * * @param length */ - (void)limitTextLength:(int)length; /** * uitextField 抖动效果 */ - (void)shake; @end
#import "UITextField+LimitLength.h" #import <objc/runtime.h> @implementation UITextField (LimitLength) static NSString *kLimitTextLengthKey = @"kLimitTextLengthKey"; - (void)limitTextLength:(int)length { objc_setAssociatedObject(self, (__bridge const void *)(kLimitTextLengthKey), [NSNumber numberWithInt:length], OBJC_ASSOCIATION_RETAIN_NONATOMIC); [self addTarget:self action:@selector(textFieldTextLengthLimit:) forControlEvents:UIControlEventEditingChanged]; } - (void)textFieldTextLengthLimit:(id)sender { NSNumber *lengthNumber = objc_getAssociatedObject(self, (__bridge const void *)(kLimitTextLengthKey)); int length = [lengthNumber intValue]; //下面是修改部分 bool isChinese;//判断当前输入法是否是中文 NSArray *currentar = [UITextInputMode activeInputModes]; UITextInputMode *current = [currentar firstObject]; //[[UITextInputMode currentInputMode] primaryLanguage],废弃的方法 if ([current.primaryLanguage isEqualToString: @"en-US"]) { isChinese = false; } else { isChinese = true; } if(sender == self) { // length是自己设置的位数 NSString *str = [[self text] stringByReplacingOccurrencesOfString:@"?" withString:@""]; if (isChinese) { //中文输入法下 UITextRange *selectedRange = [self markedTextRange]; //获取高亮部分 UITextPosition *position = [self positionFromPosition:selectedRange.start offset:0]; // 没有高亮选择的字,则对已输入的文字进行字数统计和限制 if (!position) { if ( str.length>=length) { NSString *strNew = [NSString stringWithString:str]; [self setText:[strNew substringToIndex:length]]; } } else { // NSLog(@"输入的"); } }else{ if ([str length]>=length) { NSString *strNew = [NSString stringWithString:str]; [self setText:[strNew substringToIndex:length]]; } } } } - (void)shake { CAKeyframeAnimation *keyAn = [CAKeyframeAnimation animationWithKeyPath:@"position"]; [keyAn setDuration:0.5f]; NSArray *array = [[NSArray alloc] initWithObjects: [NSValue valueWithCGPoint:CGPointMake(self.center.x, self.center.y)], [NSValue valueWithCGPoint:CGPointMake(self.center.x-5, self.center.y)], [NSValue valueWithCGPoint:CGPointMake(self.center.x+5, self.center.y)], [NSValue valueWithCGPoint:CGPointMake(self.center.x, self.center.y)], [NSValue valueWithCGPoint:CGPointMake(self.center.x-5, self.center.y)], [NSValue valueWithCGPoint:CGPointMake(self.center.x+5, self.center.y)], [NSValue valueWithCGPoint:CGPointMake(self.center.x, self.center.y)], [NSValue valueWithCGPoint:CGPointMake(self.center.x-5, self.center.y)], [NSValue valueWithCGPoint:CGPointMake(self.center.x+5, self.center.y)], [NSValue valueWithCGPoint:CGPointMake(self.center.x, self.center.y)], nil]; [keyAn setValues:array]; NSArray *times = [[NSArray alloc] initWithObjects: [NSNumber numberWithFloat:0.1f], [NSNumber numberWithFloat:0.2f], [NSNumber numberWithFloat:0.3f], [NSNumber numberWithFloat:0.4f], [NSNumber numberWithFloat:0.5f], [NSNumber numberWithFloat:0.6f], [NSNumber numberWithFloat:0.7f], [NSNumber numberWithFloat:0.8f], [NSNumber numberWithFloat:0.9f], [NSNumber numberWithFloat:1.0f], nil]; [keyAn setKeyTimes:times]; [self.layer addAnimation:keyAn forKey:@"TextAnim"]; } @end
http://blog.sina.com.cn/s/blog_60f977e70101g4gj.html
http://www.2cto.com/kf/201406/312073.html
UITextField限制输入中文字数,布布扣,bubuko.com
标签:des style blog http 使用 os io 文件
原文地址:http://blog.csdn.net/quanqinyang/article/details/38381223