UITextFieldTextDidChangeNotification iOS7未被触发

时间:2013-10-01 07:42:02

标签: uitextfield ios7

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

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

适用于iOS6,但未通过iOS7调用。有什么想法吗?

3 个答案:

答案 0 :(得分:5)

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

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

这应该有用。

答案 1 :(得分:4)

您可以使用UITextField的委托来获取有关更改文本的通知,而不是NSNotifications。

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

来自文档:

  

询问代表是否应更改指定的文本。

     

讨论

     

只要用户在文本字段中键入新字符或删除现有字符,文本字段就会调用此方法。

答案 2 :(得分:3)

更好地使用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];
    }
}