我正在使用这段代码来获取有关更改UITextField文本的信息。
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(textUpdated) name: UITextFieldTextDidChangeNotification object:self.inputValueField.text];
适用于iOS6,但未通过iOS7调用。有什么想法吗?
答案 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];
}
}