我有一个我不明白的奇怪问题。我有一个带有几个UITextField对象的UIScrollView。当我切换到视图时,我将第一个UITextField设置为firstresponder,并且由于注册视图的UIKeyboardDidShowNotification而调用keyboardWasShown方法。奇怪的是,当我触摸下一个UITextField时,不会调用keyboardWasShown方法。我不明白这一点,因为Apple的文档说“如果您的界面有多个文本字段,用户可以在它们之间点击以编辑每个文本字段中的值。但是,当发生这种情况时,键盘不会消失,但系统仍然会每次在新文本字段中开始编辑时,都会生成UIKeyboardDidShowNotification通知。“我的代码我也是直接从Apple的文档中复制过来的,它运行正常,但它只是第一次被调用。我错过了什么?
- (void)registerForKeyboardNotifications {
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWasShown:) name:UIKeyboardDidShowNotification object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWasHidden:) name:UIKeyboardDidHideNotification object:nil];
}
- (void)keyboardWasShown:(NSNotification *)aNotification {
//if (keyboardShown) return;
NSDictionary* info = [aNotification userInfo];
CGSize kbSize = [[info objectForKey:UIKeyboardBoundsUserInfoKey] CGRectValue].size;
CGRect bkgndRect = activeField.superview.frame;
bkgndRect.size.height += kbSize.height;
[activeField.superview setFrame:bkgndRect];
[scrollView setContentOffset:CGPointMake(0.0, activeField.frame.origin.y) animated:YES];
keyboardShown = YES;
UIBarButtonItem *doneButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(done)];
self.navigationItem.rightBarButtonItem = doneButton;
[doneButton release];
}
答案 0 :(得分:1)
每次更改第一响应者时都不会发布此通知。为此,您必须为UITextField或UITextView实现委托协议(取决于您使用的是什么)并从那里处理这些更改。如果以前隐藏了键盘,您只会收到键盘显示的通知。