2

我正在使用这段代码来获取有关更改 UITextField 文本的信息。

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(textUpdated) name: UITextFieldTextDidChangeNotification object:self.inputValueField.text];

在 iOS6 上工作正常,但在 iOS7 上没有被调用。有任何想法吗?

4

3 回答 3

5

问题是,您传递了错误的对象。您在 UITextField 中传递 NSString,但应该传递 UITextField 本身。

[[NSNotificationCenter defaultCenter] addObserver:self 
        selector:@selector(textUpdated)
        name: UITextFieldTextDidChangeNotification
        object:self.inputValueField];

这应该有效。

于 2014-04-27T12:05:23.560 回答
5

更好地使用NSNotificationCenter. 这是应用程序密码管理部分的代码片段。

初始化NSNotificationCenter_viewDidLoad

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(textDidChange:) name: UITextFieldTextDidChangeNotification object:nil];

然后声明它的方法textDidChange:

- (void)textDidChange:(NSNotification*)notification
{
    UITextField *textField = (UITextField *)[notification object];
    DBG(@"%@", textField.text);
    if(textField == self.txtPasscode1 && textField.text.length == 1)
    {
        [self.txtPasscode2 becomeFirstResponder];
    }
    if(textField == self.txtPasscode2 && textField.text.length == 1)
    {
        [self.txtPasscode3 becomeFirstResponder];
    }
    if(textField == self.txtPasscode3 && textField.text.length == 1)
    {
        [self.txtPasscode4 becomeFirstResponder];
    }
    if(textField == self.txtPasscode4 && textField.text.length == 1)
    {
        [self.txtPasscode1 becomeFirstResponder];
    }
}
于 2014-11-20T07:23:13.473 回答
2

代替 NSNotifications,您可以使用 UITextField 的委托来获得有关更改文本的通知。

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string

从文档中:

询问委托人是否应该更改指定的文本。

讨论

每当用户在文本字段中键入新字符或删除现有字符时,文本字段都会调用此方法。

于 2013-10-01T08:02:06.937 回答