变更记录

序号 录入时间 录入人 备注
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 效果)
1
2
textField.returnKeyType = UIReturnKeySearch; 	//设置按键类型为 Search 类型,return key 变为 "Search" 或 "搜索"
textField.enablesReturnKeyAutomatically = YES; //输入框无文字时 return key 灰色不可点
2. 限制输入指定长度 ( MAXLENGTH = 20 )
1
2
3
4
5
6
7
8
9
10
11
12
13
#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;
}

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

1
2
3
4
5
6
7
8
9
10
11
12
13
[_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. 限制输入指定字符
1
2
3
4
5
6
7
8
#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. 取消单词自动纠错
1
textField.autocorrectionType = UITextAutocorrectionTypeNo;  //用于输入英文 id 时,避免误纠正
5. 适配中英文输入时的字符长度监听(避免使用 shouldChangeCharactersInRange 出现删减时中文识别错误)
1
2
3
4
5
6
7
8
[_textFieldInput addTarget:self action:@selector(textFieldDidChange:) forControlEvents:UIControlEventEditingChanged];   //在 viewDidLoad 中注册 UIControlEventEditingChanged 监听事件

....

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

效果图

(无)

备注

(无)