textField限制输入长度

对字符串的长度限制,实现如下:

#define kMaxLength 20
- ( BOOL) textField:( UITextField *) textField shouldChangeCharactersInRange:( NSRange) range replacementString:( NSString *) string {

    NSString * toBeString = [ textField . text stringByReplacingCharactersInRange: range withString: string ];

    if ( toBeString . length > kMaxLength && range . length != 1 ){
        textField . text = [ toBeString substringToIndex: kMaxLength ];
        return NO;

    }
    return YES;
}

对汉字进行限制输入长度
#define kMaxLength 20

<1>在init时候注册notification:
[[ NSNotificationCenter defaultCenter ] addObserver: self selector: @selector( textFiledEditChanged:)
                                            name: @"UITextFieldTextDidChangeNotification"
                                          object: myTextField ];

<2>实现监听方法:
-( void) textFiledEditChanged:( NSNotification *) obj {
    UITextField * textField = ( UITextField *) obj . object;
   
    NSString * toBeString = textField . text;
    NSString * lang = [[ UITextInputMode currentInputMode ] primaryLanguage ]; // 键盘输入模式
    if ([ lang isEqualToString: @"zh-Hans" ]) { // 简体中文输入,包括简体拼音,健体五笔,简体手写
        UITextRange * selectedRange = [ textField markedTextRange ];
        //获取高亮部分
        UITextPosition * position = [ textField positionFromPosition: selectedRange . start offset: 0 ];
        // 没有高亮选择的字,则对已输入的文字进行字数统计和限制
        if ( ! position) {
            if ( toBeString . length > kMaxLength) {
                textField . text = [ toBeString substringToIndex: kMaxLength ];
            }
        }
        // 有高亮选择的字符串,则暂不对文字进行统计和限制
        else {
         
        }
    }
    // 中文输入法以外的直接对其统计限制即可,不考虑其他语种情况
    else {
        if ( toBeString . length > kMaxLength) {
            textField . text = [ toBeString substringToIndex: kMaxLength ];
        }
    }
}

<3>在dealloc里注销掉监听方法,切记!
-( void) dealloc {
    [[ NSNotificationCenter defaultCenter ] removeObserver: self
                                            name: @"UITextFieldTextDidChangeNotification"
                                          object: _albumNameTextField ];
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值