变更记录

序号 录入时间 录入人 备注
1 2016-03-28 Alfred Jiang -

方案名称

UITextField - 使用备忘

关键字

UITextField \ 使用备忘

需求场景

  1. 记录使用过程中的备忘

参考链接

  1. CSDN - iOS开发笔记--设置UITextField键盘上return key不可点击
  2. Stack Overflow - Xcode UITextField limit type of characters
  3. Stack Overflow - How to limit character input in UIAlertView UITextField

详细内容

1. 设置 return key 不可点击(类似 UISearchBar 效果)
textField.returnKeyType = UIReturnKeySearch;     //设置按键类型为 Search 类型,return key 变为 "Search" 或 "搜索"
textField.enablesReturnKeyAutomatically = YES;     //输入框无文字时 return key 灰色不可点
2. 限制输入指定长度 ( MAXLENGTH = 20 )
#define MAXLENGTH 20

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{    
    if (![textField markedTextRange] && [textField.text length] > MAXLENGTH) {

        textField.text = [textField.text substringToIndex:MAXLENGTH];

        return NO;
    }

    return YES;
}

以上方法在中文识别时有问题,建议修改为以下写法

[_textFieldInput addTarget:self action:@selector(textFieldDidChange:) forControlEvents:UIControlEventEditingChanged];   //在 viewDidLoad 中注册 UIControlEventEditingChanged 监听事件

....

#define MAXLENGTH 20

- (void)textFieldDidChange:(UITextField *)textField
{
      if (![textField markedTextRange] && [textField.text length] > MAXLENGTH) {

        textField.text = [textField.text substringToIndex:MAXLENGTH];
    }
}
3. 限制输入指定字符
#define ALPHABATES @"ABCDabcd"

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
    NSCharacterSet *cs = [[NSCharacterSet characterSetWithCharactersInString:ALPHABATES] invertedSet];
    NSString *filtered = [[string componentsSeparatedByCharactersInSet:cs] componentsJoinedByString:@""];
    return [string isEqualToString:filtered];
}
4. 取消单词自动纠错
textField.autocorrectionType = UITextAutocorrectionTypeNo;  //用于输入英文 id 时,避免误纠正
5. 适配中英文输入时的字符长度监听(避免使用 shouldChangeCharactersInRange 出现删减时中文识别错误)
[_textFieldInput addTarget:self action:@selector(textFieldDidChange:) forControlEvents:UIControlEventEditingChanged];   //在 viewDidLoad 中注册 UIControlEventEditingChanged 监听事件

....

- (void)textFieldDidChange:(UITextField *)textField
{
    NSLog(@"%ld",[textField.text length]);  //此时为 shouldChangeCharactersInRange 执行后的正确长度
}

效果图

(无)

备注

(无)

results matching ""

    No results matching ""