业务中常有一种场景,需要将textField的输入自动转换成小写或者大写.
方法一
比较常见的方法时在textField的代理方法- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
中处理.
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
// 无内容删除,iOS10三方键盘会crash
if (textField.text == 0 && string.length == 0) {
return NO;
}
// 有内容删除
if (string.length == 0) {
return YES;
}
// 输入
NSString *targetStr = [textField.text stringByReplacingCharactersInRange:range withString:string.lowercaseString];
textField.text = targetStr;
return NO;
}
但是这种方式有个问题,就是当方法返回NO时,textField不会发送UITextFieldTextDidChangeNotification
通知了,如果是要在textField的内容变化后做一些处理,则上面方法不能满足需求.
方法二
另一种方式是监听textField的UITextFieldTextDidChangeNotification
通知,不在textField变化前处理,在textField变化后再处理大小写.
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(textFieldDidChange:) name:UITextFieldTextDidChangeNotification object:self.textField];
- (void)textOfTextFieldDidChange:(NSNotification *)notification {
UITextField *textField = notification.object;
if (!textField) {
return;
}
textField.text = textField.text.lowercaseString;
}
网友评论