Pregunta

Tengo un UITextField en una vista horizontal, y cuando presiono el botón 'descartar teclado' en la parte inferior derecha de la vista UIKeyboard, el teclado NO desaparece.¿Hay alguna manera de escuchar mediante programación cuándo se presionó esta tecla?¿O hay una conexión que no veo que hará que este teclado desaparezca? Este es iOS 4 y XCode 4. Gracias.

¿Fue útil?

Solución

Tuve el mismo problema hoy y me pregunté por qué funciona en el código de muestra de accesorios de teclado de Apple. Entonces hice ingeniería inversa.El ViewController no fue el error que cometí en mi caso.

En la implementación de UIApplicationDelegate existe el punto de entrada de la aplicación, donde se configurará el controlador de vista raíz y la ventana - (void) applicationDidFinishLaunching:(UIApplication *)application.Si olvidó agregar la vista de los controladores de vista raíz a la ventana como subvista, el botón de descarte del teclado no funcionaría en ninguna vista de su aplicación.

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

No olvide configurar las salidas en el archivo xib principal.

No sé por qué esto está relacionado con el comportamiento de los teclados.Pero mi teoría es que la cadena de respuesta no está vinculada a la ventana, pero necesita.

Otros consejos

Para descartar el teclado usando el botón de descarte del teclado, debe implementar el método delegado

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

Alternativamente, si desea cerrar el teclado tocando fuera de él, 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];
        }
    }
}

debe indicarle al campo de texto que acepta la entrada del teclado que ya no sea el primero en responder.

[UITextField resignFirstRepsonder];
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top