2009-05-05 13 views
20

Tengo un cuadro de entrada de texto en mi aplicación de iPhone, cuando lo tocas en el simulador, aparece el teclado. Pero no hay forma de deshacerse de eso. Otras páginas web dan soluciones, sin explicar por qué deberían funcionar, y no funcionan para mí. Uno dice hacer que el cuadro de texto delegue su vista y luego llamar a resignfirstresponder en el objeto, pero nunca se llama. ¿Alguna sugerencia? ¿Alguien puede explicar lo que está pasando realmente? Puedo resolverlo yo mismo si supiera cuál era el paradigma de diseño ...Cómo hacer que el teclado desaparezca en el simulador de iphone

Tal vez debería simplemente poner un botón "ir" así que tengo algo para alejar el foco del campo de texto?

Respuesta

19

Una forma de hacerlo es establecer un objeto como el delegado al campo de texto e implementar

- (BOOL)textFieldShouldReturn:(UITextField *)textField 

en el que se llama a [textField resignFirstResponder]

Esto hará que el teclado a desaparecer cuando empujan el botón de regresar/ir/listo (lo que sea que haya configurado la tecla del teclado inferior derecha).

Consulte la referencia UITextFieldDelegate para obtener más información.

+1

Cuando se empieza a cabo, me encontré con [el "Tu primer "Tutorial de aplicación iOS" (http://developer.apple.com/library/ios/#documentation/iPhone/Conceptual/iPhone101/Articles/00_Introduction.html) para ser útil. Para obtener más información sobre esta respuesta, consulte la subsección "El delegado del campo de texto" en ["Implementación del controlador de visualización"] (http://developer.apple.com/library/ios/#documentation/iPhone/Conceptual/iPhone101/ Articles/06_ImplementingController.html). – sage

+1

Bastante simple, aunque ¿por qué este no es el comportamiento predeterminado? Sin embargo, esto funciona ... implemente la interfaz como se indica arriba y conecte la conexión 'delegar' en IB al propietario del archivo. – Bobby

+0

Sustituyo '[textField resignFirstResponder]' con el nombre de mi campo de texto, como '[myTextField resignFirstResponder]', no puedo hacer que funcione de cualquier manera en xcode 4.2. – raffian

5

- (BOOL)textFieldShouldReturn:(UITextField *)textField en su delegado se invoca cuando se presiona el botón de retorno.

Quiere llamar al [textField resignFirstResponder] y luego devolver YES. Eso debería hacer el truco. También asegúrese de que el delegado esté configurado. En caso de duda, agregue un punto de ruptura o NSLog y verifique.

16

Para descartar el teclado, puede usar Delegado de TextField. Para usar esto, siga estos pasos ...
1. En su viewController. h agregue la declaración de delegado de esta manera:

@interface ViewController : UIViewController <UITextFieldDelegate> { 
    }
2. En su viewController. m llamada de este método:
- (BOOL)textFieldShouldReturn:(UITextField *)textField
3. A continuación, escribir un código como este:
- (BOOL)textFieldShouldReturn:(UITextField *)textField { 
    [textField resignFirstResponder]; 
    return YES; 
    }
4. El paso final consiste en establecer el delegado del textField
- (void)viewDidLoad { 
     [super viewDidLoad]; 
     self.textField.delegate = self; 
    }

+0

¿Este truco funciona para todos los campos de texto en una sola ventana? – raffian

+0

Sí, debería ... En cualquier caso, si desea aplicar el delegado solo en un campo de texto determinado, en el campo textFieldShouldReturn: method change [textField resignFirstResponder]; con [yourTextField resignFirstResponder]; – matteodv

+0

No se puede hacer funcionar esto, hizo todo, incluso agregó 'myTextField.delegate = self' en 'initWithNibName' en ViewController, pero nunca se llama al delegado – raffian

Cuestiones relacionadas