Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Has anyone found a good way of using the new iOS5 keyboard events?

Tags:

During development of a recent feature for my iPad app, I realized that the new iOS5 keyboard docking/splitting behavior was causing huge issues. I use an inputAccessoryView for the keyboard with a text field on it similar to Safari's find on page feature. I display the keyboard over a scrollable UIWebView, so part my troubles come from having a shrunken UIWebview when the keyboard is docked and having a (mostly) fullscreen webview when it is undocked.

The main issues I have run into with the API are that the new UIKeyboardWillChangeFrameNotification and UIKeyboardDidChangeFrameNotification notifications are a step back from the previous API at best, and have garbage data that makes it nearly impossible to understand what the keyboard is really doing in many cases.

Can any of the following keyboard behaviors be recognized without arduously examining the begin/end frames that come back on the notifications?

  • Keyboard Undocks
  • Keyboard Docks
  • Keyboard Splits/Unsplits
  • Undocked Keyboard Shows
  • Undocked Keyboard Hides
  • View rotates while keyboard is undocked

I've come up with some abstractions to recognize frames that are docked or offscreen, but even with that, my code is becoming very unmanageable. If you've found better ways to do this, please answer or comment. I hope I'm missing something here. Thanks.

like image 400
TahoeWolverine Avatar asked Nov 11 '11 21:11

TahoeWolverine


1 Answers

The thing is not to overthink this. Nothing of any importance has changed. If the keyboard comes into docked position at the bottom of the screen, you will get a "show" notification. If it leaves the docked position at the bottom of the screen, you will get a "hide" notification. That's exactly what happened before iOS 5.

The only difference is that instead of leaving the docked position because it is moving offscreen, it might be leaving the docked position because the user undocked it. You'll still get a "hide", so you can move your interface back into its base position. You don't need to know that the keyboard is now undocked (though you can find out that it is not offscreen from UIKeyboardDidChangeFrameNotification if you really want to). The reason you don't need to know is that when the keyboard is undocked / split, the user can be proactive and move the keyboard if it's in the way of something that needs to be seen.

Thus, all your old code from before iOS 5 continues to work just fine. It's all really quite clever...

like image 149
matt Avatar answered Oct 21 '22 12:10

matt