0

当键盘出现时,我需要移动视图控制器的 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 创建键盘时,我应该怎么做才能避免在键盘上做出反应?

4

1 回答 1

1

添加一个BOOL属性或实例变量:careAboutKeyboard您的方法keyboardWasShown:keywardWasHidden:方法都可以访问它,可能在视图控制器中这些方法所在的位置。

将其设置为方法YES中的何时viewWillAppear,并设置为NO显示邮件视图时和在viewWillDisappear.

然后将所有滚动逻辑放入 if 块中:

if(careAboutKeyboard) {
    // Scrolling logic
}
于 2009-11-13T16:22:58.257 回答