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

JAH*_*lia 15 iphone cocoa-touch objective-c ios ios6

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

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

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

Seb*_*ian 16

你可以添加UITextFieldTextDidChangeNotification:

[[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(textFieldChanged:)
                                             name:UITextFieldTextDidChangeNotification
                                           object:textField];
Run Code Online (Sandbox Code Playgroud)

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


aka*_*kyy 14

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

[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
    }
}
Run Code Online (Sandbox Code Playgroud)

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

  • 问题在于UIKit不符合KVO标准 (5认同)

Ale*_*kov 6

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

textField.text = @"This is a test string";
[textField sendActionsForControlEvents:UIControlEventEditingChanged];
Run Code Online (Sandbox Code Playgroud)

  • 这是一个手动触发事件,在一个大项目中,每次文本更改发送事件都是不切实际的. (2认同)