美文网首页
Runtime 限制UITextField 输入字数

Runtime 限制UITextField 输入字数

作者: Disery | 来源:发表于2017-04-22 12:33 被阅读0次

项目中对昵称,用户名会限制一些输入个数  于是写了一个UITextField分类


@interface UITextField (LimitLength_h)

/**

*  使用时只要调用此方法,加上一个长度(int),就可以实现了字数限制,汉字不可以

*

*  @param length

*/

- (void)limitTextLength:(int)length;

@end

#import "UITextField+LimitLength_h.h"

#import <objc/runtime.h>

@implementation UITextField (LimitLength_h)

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]];

}

}

}

}

@end

相关文章

网友评论

      本文标题:Runtime 限制UITextField 输入字数

      本文链接:https://www.haomeiwen.com/subject/bklszttx.html