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

  • 相关阅读:
    Reporting Services系列三:几个细节
    Tips&Tricks系列一:更改VS2005设置
    Reporting Services系列二:引用.NET DLL
    数据库基础系列之六:因空间不足导致IMP失败
    .NET基础示例系列之十四:C#导出建表语句及数据
    Reporting Services系列四:折叠报表
    数据库基础系列之七:IMP数据到指定的表空间
    .NET基础示例系列之十六:制做进程监视器
    .NET基础示例系列之十九:Dundas For ASP.NET
    .NET基础示例系列之十五:操作Excel
  • 原文地址:https://www.cnblogs.com/chzheng/p/7845667.html
Copyright © 2020-2023  润新知