开发者

iPhone SDK: handling keybaord appearance

I need to move UI elements of my view controller when keyboard appears. I do this by registering for the keyboard notifications in my app delegate:

[[NSNotificationCenter defaultCenter] addObserver:observer selector:@selector(keyboardWasShown:) name:UIKeyboardDidShowNotification object:nil];

[[NSNotificationCenter defaultCenter] addObserver:observer
                                         selector:@selector(keyboardWasHidden:)
                                             name:UIKeyboardDidHideNotification object:nil];

and then handling notification as prescribed by Apple (I have similar code for keyboard was shown) to scroll the view up and down:

- (void)keyboardWasHidden:(NSNotification*)aNotification { CGRect viewFrame = [self.view frame]; viewFrame.origin.y += keyboardSize.height - TOOLBAR_HEIGHT; self.view.frame = viewFrame; }

So far so good. Now problem description:

When I execute this code to show OS 3.0 specific message UI:

MFMailComposeVie开发者_StackOverflow社区wController *picker = [[MFMailComposeViewController alloc] init]; picker.mailComposeDelegate = self; [self presentModalViewController:picker animated:YES];

and when keyboard shows in the actual mail UI, I still get keyboard notification which scrolls my view and therefore breaking my UI (note that mail controller takes entire screen and my view is not even visible at this point).

I was hoping to temporary disable keyboard notification, so my scrolling code would not get called with this line:

[[NSNotificationCenter defaultCenter] removeObserver:self];

But it does not help, keyboard even still get posted.

What should I do avoid reacting on the keyboard when it created by the message UI?


Add a BOOL property or instance variable: careAboutKeyboard that's accessible to both your keyboardWasShown: and keywardWasHidden: methods, likely in the view controller those methods are in.

Have it set to YES when in the viewWillAppear method, and set to NO when you show the mail view and in viewWillDisappear.

Then put all of your scrolling logic in an if block:

if(careAboutKeyboard) {
    // Scrolling logic
}
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜