iPad keyboard will not dismiss if modal ViewController presentation style is UIModalPresentationFormSheet

first-responder, ios, iphone, objective-c, uitextfield

Solution

In the view controller that is presented modally, just override `disablesAutomaticKeyboardDismissal` to return `NO`:

- (BOOL)disablesAutomaticKeyboardDismissal {
    return NO;
}

Problem

Note: See accepted answer (not top voted one) for solution as of iOS 4.3. This question is about a behavior discovered in the iPad keyboard, where it refuses to be dismissed if shown in a modal dialog with a navigation controller. Basically, if I present the navigation controller with the following line as below: ``` navigationController.modalPresentationStyle = UIModalPresentationFormSheet; ``` The keyboard refuses to be dismissed. If I comment out this line, the keyboard goes away fine. ... I've got two textFields, username and password; username has a Next button and password has a Done button. The keyboard won't go away if I present this in a modal navigation controller. WORKS ``` broken *b = [[broken alloc] initWithNibName:@"broken" bundle:nil]; [self.view addSubview:b.view]; ``` DOES NOT WORK ``` broken *b = [[broken alloc] initWithNibName:@"broken" bundle:nil]; UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:b]; navigationController.modalPresentationStyle = UIModalPresentationFormSheet; navigationController.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal; [self presentModalViewController:navigationController animated:YES]; [navigationController release]; [b release]; ``` If I remove the navigation controller part and present 'b' as a modal view controller by itself, it works. Is the navigation controller the problem? WORKS ``` broken *b = [[broken alloc] initWithNibName:@"broken" bundle:nil]; b.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal; [self presentModalViewController:b animated:YES]; [b release]; ``` WORKS ``` broken *b = [[broken alloc] initWithNibName:@"broken" bundle:nil]; UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:b]; [self presentModalViewController:navigationController animated:YES]; [navigationController release]; [b release]; ```

Original source

Related problems