当键盘出现时,我需要移动视图控制器的UI元素。我是通过在我的app delegate中注册键盘通知来完成此操作的:
[[NSNotificationCenter defaultCenter] addObserver:observer
selector:@selector(keyboardWasShown:)
name:UIKeyboardDidShowNotification object:nil];
[[NSNotificationCenter defaultCenter] addObserver:observer
selector:@selector(keyboardWasHidden:)
name:UIKeyboardDidHideNotification object:nil];
[[NSNotificationCenter defaultCenter] addObserver:observer
selector:@selector(keyboardWasHidden:)
name:UIKeyboardDidHideNotification object:nil];
然后处理Apple规定的通知(我显示了类似的键盘代码)来上下滚动视图:
到现在为止还挺好。现在问题描述:
当我执行此代码以显示OS 3.0特定消息UI时:
- (void)keyboardWasHidden:(NSNotification*)aNotification
{
CGRect viewFrame = [self.view frame];
viewFrame.origin.y += keyboardSize.height - TOOLBAR_HEIGHT;
self.view.frame = viewFrame;
}
当键盘显示在实际的邮件用户界面中时,我仍然会收到键盘通知,滚动我的视图,从而破坏我的用户界面(注意邮件控制器占用整个屏幕,此时我的视图甚至都不可见)。
我希望暂时禁用键盘通知,因此不会使用此行调用我的滚动代码:
MFMailComposeViewController *picker = [[MFMailComposeViewController alloc] init];
picker.mailComposeDelegate = self;
[self presentModalViewController:picker animated:YES];
但它没有帮助,键盘甚至还没有发布。
我应该怎么做才能避免在消息UI创建时对键盘做出反应?
答案 0 :(得分:1)
添加BOOL
属性或实例变量:careAboutKeyboard
,keyboardWasShown:
和keywardWasHidden:
方法都可以访问这些属性,可能在视图控制器中可以使用这些方法。
在YES
方法中将其设置为viewWillAppear
,在显示邮件视图时设置为NO
并在viewWillDisappear
中设置。
然后将所有滚动逻辑放在if块中:
if(careAboutKeyboard) {
// Scrolling logic
}