变更记录
序号 | 录入时间 | 录入人 | 备注 |
---|---|---|---|
1 | 2016-03-28 | Alfred Jiang | - |
方案名称
UITextField - 使用备忘
关键字
UITextField \ 使用备忘
需求场景
- 记录使用过程中的备忘
参考链接
- CSDN - iOS开发笔记--设置UITextField键盘上return key不可点击
- Stack Overflow - Xcode UITextField limit type of characters
- 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 执行后的正确长度
}
效果图
(无)
备注
(无)