如何检测UITextField何时变空

Jak*_*kub 8 iphone

当UITextField变空时,我想执行某个操作(用户一个接一个地删除所有符号或使用clear选项).

我想过用两种方法

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string;
Run Code Online (Sandbox Code Playgroud)

- (BOOL)textFieldShouldClear:(UITextField *)textField;
Run Code Online (Sandbox Code Playgroud)

UITextFieldDelegate
Run Code Online (Sandbox Code Playgroud)

我不确定如何在文本字段变空时检测到这种情况?我尝试过:

if ([textField.text length] == 0)
Run Code Online (Sandbox Code Playgroud)

但它不起作用,因为在从文本字段中删除符号之前调用上述方法的fisrt.

有任何想法吗?

Win*_*ked 38

-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
    NSRange textFieldRange = NSMakeRange(0, [textField.text length]);
    if (NSEqualRanges(range, textFieldRange) && [string length] == 0) {
        // Game on: when you return YES from this, your field will be empty
    }
    return YES;
}
Run Code Online (Sandbox Code Playgroud)

请注意,在此方法返回之前,该字段不会为空,因此您可能希望在此处设置一些中间状态,然后使用textFieldDidEndEditing:以了解用户是否已清空该字段.


ata*_*asa 5

如果有人正在搜索此代码的 Swift 4.2 版本,则如下所示。

func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
    let textFieldRange = NSRange(location: 0, length: textField.text?.count ?? 0)
    if NSEqualRanges(range, textFieldRange) && string.count == 0 {
        // Do whatever you want when text field is empty.
    }
    return true
}
Run Code Online (Sandbox Code Playgroud)