Descartar el teclado del iphone

Estoy tratando de recrear algo similar al teclado emergente utilizado en safari.

texto alternativo

Puedo reproducir visualmente al colocar una barra de herramientas sobre mi vista y los botones apropiados, sin embargo no puedo encontrar ninguna manera de cerrar el teclado una vez que el usuario ha tocado el botón hecho.

    Has probado:

    [viewReceivingKeys resignFirstResponder]; 

    donde viewReceivingKeys es el UIView que está recibiendo la entrada de texto?

    Hay un par de cosas que debes recordar. El número n. ° 1 que los desarrolladores se olvidan de establecer es el delegado de textField.

    Si está utilizando Interface Builder, debe recordar que necesita configurar el delegado de textField en el archivo Owner.

    Si no está utilizando Interface Builder, asegúrese de configurar el delegado del campo de texto en self. También incluyo el tipo de retorno. Por ejemplo, si textField se llamaba gameField:

     gameField.delegate = self; gameField.returnKeyType = UIReturnKeyDone; 

    También debe implementar el UITextFieldDelegate para su ViewController.

     @interface YourViewController : UIViewController  

    Finalmente, debe usar el método textFieldShouldReturn y llamar a [textField resignFirstResponder]

      -(BOOL) textFieldShouldReturn:(UITextField*) textField { [textField resignFirstResponder]; return YES; } 

    Todos tus textFields usarán este mismo método, por lo que solo necesitas tener esta configuración una vez. Siempre que el delegado esté configurado para textField, se implementa UITextFieldDelegate para la interfaz, se agrega el método textFieldShouldReturn y se llama al conjunto resignFirstResponder.

    Si construye sus propias vistas en Interface Builder, configure su controlador de vista para que sea delegado para el campo de texto e implemente textFieldShouldReturn: from UITextFieldDelegate en su controlador de vistas.

     - (BOOL)textFieldShouldReturn:(UITextField *)theTextField { NSLog(@"%@ textFieldShouldReturn", [self class]); [theTextField resignFirstResponder]; // do stuff with the text NSLog(@"text = %@", [theTextField text]); return YES; } 

    UITextFieldDelegate textFieldShouldReturn: en el iphone cocoa docs

    Si está hablando de descartar el teclado de un UITextField lugar de un UITextView . Tu pregunta no es tan clara? Si es así, asegúrese de que su clase esté marcada como UITextFieldDelegate en el archivo de interfaz,

     @interface MyController: UIViewController  { UITextField *activeTextField; // ...remainder of code not show ... } 

    y luego deberías implementar los dos métodos de delegado como a continuación,

     - (BOOL)textFieldShouldBeginEditing:(UITextField *)textField { activeTextField = textField;! return YES; } - (BOOL)textFieldShouldReturn:(UITextField *)textField { activeTextField = nil; [textField resignFirstResponder]; return YES; } 

    Sin embargo, si está utilizando una UITextView , las cosas son un poco más complicadas. El protocolo UITextViewDelegate carece del equivalente del método textFieldShouldReturn: presumiblemente porque no deberíamos esperar que la tecla Return sea una señal de que el usuario desea dejar de editar el texto en un cuadro de diálogo de entrada de texto multilínea (después de todo, el usuario puede desea insertar saltos de línea presionando Return).

    Sin embargo, hay varias formas de evitar la posibilidad de que el UITextView renuncie como primer respondedor usando el teclado. El método habitual es colocar un botón Hecho en la barra de navegación cuando el UITextView presenta el teclado emergente. Cuando se toca, este botón le pide a la vista de texto que se resigne como primera respuesta, que luego cerrará el teclado.

    Sin embargo, dependiendo de cómo haya planificado su interfaz, es posible que desee que el UITextView cuando el usuario UITextView fuera de UITextView . Para hacerlo, debe subclasificar a UIView para que acepte toques, y luego indicarle a la vista de texto que debe renunciar cuando el usuario toque fuera de la vista.

    Crea una nueva clase,

     #import  @interface CustomView : UIView { IBOutlet UITextView *textView; } @end 

    Luego, en la implementación, implemente el touchesEnded:withEvent: y solicite a UITextView que renuncie como primera respuesta.

     #import "CustomView.h" @implementation CustomView - (id)initWithFrame:(CGRect)frame { if (self = [super initWithFrame:frame]) { // Initialization code } return self; } - (void) awakeFromNib { self.multipleTouchEnabled = YES; } - (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event { NSLog(@"touches began count %d, %@", [touches count], touches); [textView resignFirstResponder]; [self.nextResponder touchesEnded:touches withEvent:event]; } @end 

    Una vez que hayas agregado la clase, debes guardar todos tus cambios, luego ingresar a Interface Builder y hacer clic en tu vista. Abra el inspector de identidad en el pabel de la Utilidad y cambie el tipo de la vista en su archivo de punta para ser su CustomView lugar de la clase UIView predeterminada. Luego, en el Inspector de conexiones, arrastre la salida textView a UITextView . Después de hacerlo, y una vez que reconstruya su aplicación, los toques fuera de los elementos de la interfaz de usuario activa ahora desactivarán el teclado. Sin embargo, UIView cuenta que si la UIView que está subclasificando está “detrás” de otros elementos de la IU, estos elementos interceptarán los toques antes de que lleguen a la capa UIView. Entonces, si bien esta solución es elegante, puede usarse solo en algunas situaciones. En muchos casos, tendrá que recurrir al método de fuerza bruta de agregar un botón Hecho a la barra de navegación para cerrar el teclado.

    utilizar un controlador de navegación y abrir la vista cuando haya terminado?

    por ejemplo, uso un código como este para deslizar un cuadro sobre:

     [[self navigationController] presentModalViewController:modalViewController animated:YES]; 

    y luego, cuando se hace clic en el botón de esa casilla, lo uso para deshacerme de él:

     [self.navigationController dismissModalViewControllerAnimated:YES]; 

    En mi caso, el cuadro Acerca de ocupa toda la pantalla, pero no creo que tenga que hacerlo para que funcione.

    editar: Creo que puedo haber entendido mal tu pregunta. Algo similar a mi código sería si está fingiendo la vista del teclado completo usted mismo. Creo que renunciar a la primera respuesta es la forma correcta de hacerlo si se trata del teclado normal con la barra de herramientas agregada en la parte superior.