iOS系统UITextField研究

来源:互联网 发布:阿里巴巴外贸绑定域名 编辑:程序博客网 时间:2024/06/10 19:01

以前在项目上遇到客户需要限输入手机号的时候,限定只输入11位,当时客户催得很急,当时我也在外地,就随便找了方法,实现了具体功能,但没去具体研究,现在闲闲来就研究了下,话不多说,看问题。

每当UITextField的输入框内的值发生改变时,就会发出通知,

UITextFieldTextDidChangeNotification这个通知在一次输入结束的时候就会发出,因此可以注册观察者,如下代码:

    [[NSNotificationCenter defaultCenter] addObserver:selfselector:@selector(putInTextFieldEditChanged:)name:@"UITextFieldTextDidChangeNotification"object:self.textField];

当收到这个通知后做如下处理,

- (void)putInTextFieldEditChanged:(NSNotification *)obj

{

    UITextField *textField = (UITextField *)obj.object;

    NSString *toBeString = textField.text;

    // 键盘输入模式

    NSString *lang = [[UIApplicationsharedApplication]textInputMode].primaryLanguage;

    if ([langisEqualToString:@"zh-Hans"]) {// 简体中文输入,包括简体五笔,简体手写

        UITextRange *selectedRange = [textFieldmarkedTextRange];

        //获取高亮部分

        UITextPosition *position = [textField positionFromPosition:selectedRange.startoffset:0];

        // 没有高亮选择的字,则对已输入的文字进行字数统计和限制

        if (!position) {

            if (toBeString.length >kMaxLength) { // kMaxLength这个宏定义可以根据自己需求设置

                textField.text = [toBeString substringToIndex:kMaxLength];

            }

        }

        // 有高亮选择的字符串,则暂不对文字进行统计和限制

        else{

        }

    } // 中文输入法以外的直接对其统计限制即可,不考虑其他语种情况

    else{ //对其他文本字符长度的限制

        if (toBeString.length >kMaxLength) {

            textField.text = [toBeString substringToIndex:kMaxLength];

        }

    }

}


注册的这个观察者也可以用来做其他事件处理

比如需要在输入的时候,输入框里的内容不但要显示输入框还要把输入的内容提示到一个弹出视图,当输入完成后弹出视图消失,这时就可以用UIView的动画进行配合使用,这里不好展示,读者如有这方面的需求,如不知如何实现,可以留言,我及时回复。



0 0
原创粉丝点击