当键盘出现时,我需要移动视图控制器的 UI 元素。我通过在我的应用程序委托中注册键盘通知来做到这一点:
[[NSNotificationCenter defaultCenter] addObserver:observer
selector:@selector(keyboardWasShown:)
name:UIKeyboardDidShowNotification object:nil];
[[NSNotificationCenter defaultCenter] addObserver:observer
selector:@selector(keyboardWasHidden:)
name:UIKeyboardDidHideNotification object:nil];
然后按照 Apple 的规定处理通知(我显示了类似的键盘代码)以上下滚动视图:
- (void)keyboardWasHidden:(NSNotification*)aNotification
{
CGRect viewFrame = [self.view frame];
viewFrame.origin.y += keyboardSize.height - TOOLBAR_HEIGHT;
self.view.frame = viewFrame;
}
到现在为止还挺好。现在问题描述:
当我执行此代码以显示 OS 3.0 特定消息 UI 时:
MFMailComposeViewController *picker = [[MFMailComposeViewController alloc] init];
picker.mailComposeDelegate = self;
[self presentModalViewController:picker animated:YES];
当键盘显示在实际的邮件 UI 中时,我仍然会收到键盘通知,它会滚动我的视图并因此破坏我的 UI(请注意,邮件控制器占据整个屏幕,此时我的视图甚至不可见)。
我希望暂时禁用键盘通知,所以我的滚动代码不会被这一行调用:
[[NSNotificationCenter defaultCenter] removeObserver:self];
但这无济于事,键盘甚至仍然被张贴。
当消息 UI 创建键盘时,我应该怎么做才能避免在键盘上做出反应?