textField输入自动转小写

业务中常有一种场景,需要将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;
}

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容