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;
}

你可能感兴趣的:(textField输入自动转小写)