当键盘没有进行更改时,检测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... }
你试过这个吗?