zoukankan      html  css  js  c++  java
  • iOS 限制字符输入长度(完善版本)

    在开发中遇到一个问题,姓名输入框需要限制输入8个字符,如果是简单的监听文字改变,判断并截取前8个字符的话会出发一个bug,当输入到最后几个字符时输入的拼音也会算在8个字符中并被截取,用起来体验很不好,最后几个字会很难打。所以有下面这种处理方法:

    1、添加监听 [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(textFiledEditChanged:)
    name:@"UITextFieldTextDidChangeNotification"
    object:myTextField];

    或者

    [myTextField addTarget:self action:@selector(textFieldTextChanged:) forControlEvents:UIControlEventEditingChanged];

    2、-(void)textFiledEditChanged:(NSNotification *)obj{//这里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];
    // 没有高亮选择的字,则对已输入的文字进行字数统计和限制 kMaxLength是想要限制的长度值
    if (!position) {
    if (toBeString.length > kMaxLength) {
    textField.text = [toBeString substringToIndex:kMaxLength];
    }
    }
    // 有高亮选择的字符串,则暂不对文字进行统计和限制
    else{

    }
    }
    // 中文输入法以外的直接对其统计限制即可,不考虑其他语种情况
    else{
    if (toBeString.length > kMaxLength) {
    textField.text = [toBeString substringToIndex:kMaxLength];
    }
    }
    }
    3、-(void)dealloc{//如果是添加的监听,不要忘记移除
    [[NSNotificationCenter defaultCenter]removeObserver:self
    name:@"UITextFieldTextDidChangeNotification"
    object:_albumNameTextField];
    }

  • 相关阅读:
    oracel与mysql 查询从创建时间到更新时间的3天内的数据
    微信创建菜单
    利用XStream实现实体类与xml的转换
    play freamwork 框架中 调用线程保存数据
    play freamwork 框架中 设置文件大小
    将javabean转为map类型,然后返回一个map类型的值
    Base64的加密,解密
    MD5加密
    实体类与CDATA类型的xml的转换的工具类
    解决oracle数据库中 ORA-01843: 无效的月份问题
  • 原文地址:https://www.cnblogs.com/chzheng/p/7845667.html
Copyright © 2011-2022 走看看