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

  • 相关阅读:
    Executors线程池
    解决HtmlAgilityPack无法获取form标签子节点的问题
    nohup不输出日志信息的方法,及linux重定向学习
    将博客从jekyll迁移到了hexo
    node-webkit中使用sqlite3(MAC平台)
    借助Nodejs在服务端使用jQuery采集17173游戏排行信息
    Shell脚本中的交互式命令处理
    通过桥接虚拟网卡使VMWare和宿主机实现双向通讯
    MySql使用show processlist查看正在执行的Sql语句
    Sql合并两个select查询
  • 原文地址:https://www.cnblogs.com/chzheng/p/7845667.html
Copyright © 2011-2022 走看看