I'm trying to hide the iPad keyboard from a modal view controller but it doesn't work. I have tried resignFirstResponder but that doesn't have any affect if we are in a modal view controller. I tried resignFirstResponder in a non-modal UINavigationController with the very same UIViewController and the keyboard hides correctly.
Does anyone know how solve this problem?
Thanks.
[Update] it looks like there's something wrong with my code because the resignFirstResponder does work (I made a simple test case instead of using my code). But I still don't know what the problem is.
Apparently, there is a new
-[UIViewController disablesAutomaticKeyboardDismissal]
method that you may override to solve this problem in iOS 4.3.I just confirmed the problem is indeed UIModalPresentationFormSheet and filed a bug report to apple rdar://8084017
It was because I was using UIModalPresentationFormSheet. All of the other ones work as expected.... Wasted several hours on that.
This was a total pain to find. Seems like one of the poorer API designs in iOS. Much appreciation to @0xced and @manicaesar for the answers.
Here's my consolidated answer for future devs who are stuck beating their head against the wall.
If it's a single view controller, just override
disablesAutomaticKeyboardDismissal
and return NO.If it's a navigation controller in a modal, create your own UINavigationController subclass like so:
In .h...
In .m....
In your code that shows a modal view controller.
I solved this by resizing a UIModalPresentationPageSheet. See my answer here.