当键盘没有进行更改时,检测UITextField内容的变化

我有一个UIButton和一个UITextField ,当按下按钮时,textfield的内容字符串将等于: This is a test string ,在这种情况下,如何检测到该文本字段已更改其内容?

ps UITextField's委托方法在这种情况下不起作用

更新:我希望此行为适用于iOS 6+设备。

也许简单的键值观察会起作用吗?

 [textField addObserver:self forKeyPath:@"text" options:0 context:nil]; - (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context { if([keyPath isEqualToString:@"text"] && object == textField) { // text has changed } } 

编辑:我刚检查过,它对我有用。

您可以添加UITextFieldTextDidChangeNotification

 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(textFieldChanged:) name:UITextFieldTextDidChangeNotification object:textField]; 

textField (param对象)是你的UITextField。 selector是在触发此通知时将调用的方法。

您可以在UIControlEventEditingChanged事件中处理文本更改。 因此,当您更改文本programmaticaly时,只需发送此事件:

 textField.text = @"This is a test string"; [textField sendActionsForControlEvents:UIControlEventEditingChanged]; 

委托方法实际上可能适合您。 您将获得文本字段,将更改的范围以及新字符串。 您可以将这些放在一起以确定建议的字符串。

 - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string { NSMutableString *proposed = [NSMutableString stringWithString:textField.text]; [proposed replaceCharactersInRange:range withString:string]; NSLog(@"%@", proposed); // Do stuff. return YES; // Or NO. Whatever. It's your function. } 

这是一个非常强大的解决方案,但它应该工作。 在按下按钮时调用的函数中…

 NSString *string = [NSString stringWithFormat:@"This is a test string"]; if(string == textfield.text){ ... } 

或者,您可以使用自我调度程序来检查它是否已反复更改。

这是akashivskyy的答案的Swift3版本:

 func startObservingTextView() { textView.addObserver(self, forKeyPath:"text", options: NSKeyValueObservingOptions(rawValue: 0), context: nil) } func stopObservingTextView() { textView.removeObserver(self, forKeyPath: "text") } override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) { if let textViewObject = object as? UITextView, textViewObject == textView, keyPath == "text" { // text has changed } } 
 - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string { //You code here... } 

你试过这个吗?