Runtime 限制UITextField 输入字数

项目中对昵称,用户名会限制一些输入个数  于是写了一个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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1、设置UILabel行间距 NSMutableAttributedString* attrString = [[...
    十年一品温如言1008阅读 1,720评论 0 3
  • 1.NSTimer //暂停if ([timer isValid]) {[timer setFireDate:[N...
    俊月阅读 1,375评论 0 0
  • 1、设置UILabel行间距 NSMutableAttributedString* attrString = [[...
    FF_911阅读 1,424评论 0 3
  • 无名的人 有 很多 无名者 是 那些 无法被人记住的人 无名者 是 那些 被人忘记的人 你与我 也是 大多数人中 ...
    饮雪一阅读 450评论 0 0
  • 01 记得过去一位同学L跟我讲过,在南京,苏州这些地方女士和男士吃饭,基本上要把自己的食物留一半,比如牛排只会吃掉...
    東門聖手阅读 235评论 0 3