我正在使用这段代码来获取有关更改 UITextField 文本的信息。
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(textUpdated) name: UITextFieldTextDidChangeNotification object:self.inputValueField.text];
在 iOS6 上工作正常,但在 iOS7 上没有被调用。有任何想法吗?
我正在使用这段代码来获取有关更改 UITextField 文本的信息。
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(textUpdated) name: UITextFieldTextDidChangeNotification object:self.inputValueField.text];
在 iOS6 上工作正常,但在 iOS7 上没有被调用。有任何想法吗?
问题是,您传递了错误的对象。您在 UITextField 中传递 NSString,但应该传递 UITextField 本身。
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(textUpdated)
name: UITextFieldTextDidChangeNotification
object:self.inputValueField];
这应该有效。
更好地使用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];
}
}
代替 NSNotifications,您可以使用 UITextField 的委托来获得有关更改文本的通知。
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
从文档中:
询问委托人是否应该更改指定的文本。
讨论
每当用户在文本字段中键入新字符或删除现有字符时,文本字段都会调用此方法。