Joshua Parmenter
Joshua Parmenter

Reputation: 23

iPad 'dismiss keyboard' button doesn't dismiss keyboard

I have a UITextField in a Landscape view, and when I press the 'dismiss keyboard' button in the lower right of the UIKeyboard view, the keyboard does NOT disappear. Is there a way to programmatically listen for when this key was pressed? Or is there a connection I am not seeing that will make this keyboard go away? This is iOS 4 and XCode 4. Thanks.

Upvotes: 0

Views: 2852

Answers (3)

Michael
Michael

Reputation: 73

you need to tell the text field that is accepting the keyboard input to no longer be the first responder.

[UITextField resignFirstRepsonder];

Upvotes: 0

backboon
backboon

Reputation: 36

I had same problem today and I wondered, wy it works in Apple's KeyboardAccessory Sample Code. So I did reverse engineering. The ViewController was not the mistake I made in my case.

In the implementation of UIApplicationDelegate there is the entry point of application, where root viewcontroller and window will be setup - (void) applicationDidFinishLaunching:(UIApplication *)application. If you forgot to add root viewcontrollers view to window as subview, the dismiss-keyboard-button wouldn't work in any view of your app.

@class ViewController;

@interface KeyboardAccessoryAppDelegate : NSObject <UIApplicationDelegate> {
  UIWindow *window;
  ViewController *viewController;
}

  @property (nonatomic, retain) IBOutlet UIWindow *window;
  @property (nonatomic, retain) IBOutlet ViewController *viewController;

@end

...

- (void)applicationDidFinishLaunching:(UIApplication *)application {    

  [window addSubview:viewController.view];
  [window makeKeyAndVisible];
}

Please don't forget to setup the outlets in the main xib file.

I dont know why this is related to keyboards behavior. But my theory is, that the responder chain is not linked to window, but it needs.

Upvotes: 2

capt kettch
capt kettch

Reputation: 11

To dismiss the keyboard using the dismiss keyboard button you need to implement the delegate method

- (BOOL)textFieldShouldReturn:(UITextField *)textField
{
    //Check if your text field is first responder, and if it is, have it resign
}

Alternatively, if you want to dismiss the keyboard by tapping outside of it, use

-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
    for (UIView* view in self.view.subviews)
    {
        if ([view isKindOfClass:[UITextField class]]) {
            [view resignFirstResponder];
        }

        if ([view isKindOfClass:[UITextView class]]) {
            [view resignFirstResponder];
        }
    }
}

Upvotes: 0

Related Questions