- (void)切换到另一个UITextField时未调用keyboardWasShown

时间:2010-04-15 01:58:51

标签: iphone

我有一个我不明白的奇怪问题。我有一个带有几个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];
}

1 个答案:

答案 0 :(得分:1)

每次更改第一响应者时都不会发布此通知。为此,您必须为UITextField或UITextView实现委托协议(取决于您使用的是什么)并从那里处理这些更改。如果以前隐藏了键盘,您只会收到键盘显示的通知。