3

我目前有一个带有默认文本的 UITextField,并在编辑开始时设置为清除。我正在尝试这样做,以便在完成编辑时如果该字段为空或 nil,则文本值将再次成为默认文本。我无法检测何时完成编辑或关闭键盘。谁能告诉我我想使用哪种检测方法以及如何实现它?非常感谢!


编辑


placeholder在我的情况下不能使用A

4

6 回答 6

13

您必须使用文本字段委托

-(void)textFieldDidEndEditing:(UITextField *)textField;

在这个委托中进行这样的检查

if ( [textField.text length] == 0 )
{
    // the text field is empty do your work
} else {
    ///  the text field is not empty 
}
于 2012-05-15T06:16:38.963 回答
9
- (BOOL)textField:(UITextField*)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString*)string
{
    if (range.location == 0 && string.length == 0)
    {
        //textField is empty
    }
    return YES;
}
于 2013-09-14T10:12:44.240 回答
4

我认为您不需要自己处理“默认文本”。检查类placeholder的属性UITextField

更新

所以placeholder对你的情况不好。您是否尝试UITextFieldDelegate为您实现方法UITextField并更改文本textViewDidEndEditing:

为此,UITextFieldDelegate请在视图控制器中实现对您的场景有用的方法,并将delegateUITextField的设置为视图控制器(通过 Interface Builder 或以编程方式)。textViewDidEndEditing:在方法中设置默认文本。

您可以参考iOS 的文本、Web 和编辑编程指南的“获取输入的文本和设置文本”部分。

于 2012-04-25T01:22:43.437 回答
2

当您在文本字段返回时收到委托调用时,使用sender参数检查文本 ( sender.text),如果等于则@""设置您的默认文本。

于 2012-04-25T02:17:26.093 回答
2

我使用两种方法。我的选择取决于应用程序的业务逻辑。

1)我在应用更改后检查结果文本shouldChangeCharactersIn

func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
        var text = textField.text ?? ""

        let startIndex = text.index(text.startIndex, offsetBy: range.location)
        let endIndex = text.index(text.startIndex, offsetBy: range.location + range.length)
        text = text.replacingCharacters(in: startIndex..<endIndex, with: string)
        if text.count == 0 {
            // textField is empty
        } else {
            // textField is not empty
        }
        return true
    }

2)我使用editingChanged动作:

@IBAction private func textFieldDidChange(_ sender: UITextField) {
        if (sender.text?.count ?? 0) == 0 {
            // textField is empty
        } else {
            // textField is not empty
        }
    }
于 2020-03-05T07:51:17.153 回答
1

您还需要检查删除的范围是否是文本的整个长度。

func textField(_ textField: UITextField, shouldChangeCharactersIn range:  NSRange, replacementString string: String) -> Bool {
    if !(range.location == 0 && string.count == 0 && range.length == textField.text?.count) {
      // Text field is empty
    }
    return true
}
于 2018-08-27T20:25:14.203 回答