Pergunta

Eu tenho um UITextField em uma visualização Paisagem e quando pressiono o botão 'dispensar teclado' no canto inferior direito da visualização UIKeyboard, o teclado NÃO desaparece.Existe uma maneira de ouvir programaticamente quando essa tecla foi pressionada?Ou há uma conexão que não estou vendo que fará com que este teclado desapareça? Este é o iOS 4 e o XCode 4. Obrigado.

Foi útil?

Solução

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.

Outras dicas

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];
        }
    }
}

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

[UITextField resignFirstRepsonder];
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top