2011-08-02 13 views

Respuesta

60
[myTextField resignFirstResponder] 

Here, segundo párrafo en la sección Administrar el teclado.

6

sugiero agregar y acción de su archivo de cabecera:

-(IBAction)removeKeyboard; 

Y en la aplicación, escribir algo como esto:

-(IBAction)removeKeyboard 
{ 
[self.textfield resignFirstResponder]; 
} 

En el archivo SEMILLA, conectar desde el UITextFiled a la Propietario del archivo en la opción DidEndOnExit. De esa manera, cuando presiones regresar, el teclado desaparecerá.

Espero que ayude!

183

Si tiene varios campos de texto y no sabe cuál es el primero en responder (o que simplemente no tienen acceso a los campos de texto desde donde se está escribiendo el código) se puede llamar endEditing: en la vista padre que contiene los campos de texto

En el método de un controlador de vista, se vería así:

[self.view endEditing:YES]; 

El parámetro fuerza el campo de texto a renunciar primer estado que responde. Si estaba utilizando un delegado para realizar la validación y quería dejar todo hasta que el contenido del campo de texto eran válidas, también se puede codificar de esta manera:

BOOL didEndEditing = [self.view endEditing:NO]; 
if (didEndEditing) { 
    // on to the next thing... 
} else { 
    // text field must have said to first responder status: "never wanna give you up, never wanna let you down" 
} 

El método endEditing: es mucho mejor que decirle a los campos de texto individuales para resignFirstResponder , pero por alguna razón nunca me enteré hasta hace poco.

+70

Damnit! No puedo creer que acabo de tener un rickrolled en un comentario de código. – Lytol

1

Usted acaba de cambiar yourTextFieldName con, adivinaron! su campo de texto Esto cerrará el teclado.

[yourTextFieldName resignFirstResponder]; 
1
-(void)methodName 
{ 
    [textFieldName resignFirstResponder]; 
} 

llamada de este método (methodName) con didEndOnExit

2

Si no sabe qué textField es el primer nivel de respuesta se puede encontrar. Yo uso esta función:

UIView *resignFirstResponder(UIView *theView) 
{ 
    if([theView isFirstResponder]) 
    { 
     [theView resignFirstResponder]; 
     return theView; 
    } 
    for(UIView *subview in theView.subviews) 
    { 
     UIView *result = resignFirstResponder(subview); 
     if(result) return result; 
    } 
    return nil; 
} 

Luego, en su llamada código:

UIView *resigned = resignFirstResponder([UIScreen mainScreen]); 
6

En el controlador de vista YourViewController.h archivo, asegúrese de que implemente el protocolo UITextFieldDelegate:

@interface YourViewController : <UITextFieldDelegate> 

@end 

Entonces, en el archivo YourViewController.m, poner en práctica el método siguiente ejemplo:

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { 
    [self.yourTextField1 resignFirstResponder]; 
    [self.yourTextField2 resignFirstResponder]; 
    ... 
    [self.yourTextFieldn resignFirstResponder]; 
} 
8

Hay casos en que no hay campo de texto es el primer respondedor pero el teclado está en pantalla. En estos casos, los métodos anteriores no eliminan el teclado.

Un ejemplo de cómo llegar:

  1. empuje del ABPersonViewController en la pantalla mediante programación; abrir cualquier contacto;
  2. toque el campo "nota" (que se convierte primero en responder y los incendios hasta el teclado);
  3. golpe a la izquierda en cualquier otro campo para hacer el botón "Eliminar" aparecerá;
  4. por este punto no tiene una primera respuesta entre los campos de texto (simplemente revise programáticamente) pero el teclado todavía está allí. Llamar a [view endEditing: YES] no hace nada.

En este caso también hay que pedir al controlador de vista para salir del modo de edición:

[viewController setEditing:NO animated:YES]; 
4

he descubierto un caso en endEditingresignFirstResponder y fallan. Esto me ha funcionado en esos casos.

[[UIApplication sharedApplication] sendAction:@selector(resignFirstResponder) to:nil from:nil forEvent:nil];  
[self setEditing:NO]; 
2

Este renunciará un campo de texto en particular

// Swift 
TextField.resignFirstResponder() 

// Objective C 
[TextField resignFirstResponder]; 

Para renunciar a cualquier uso en el campo de texto de abajo código

// Swift 
self.view!.endEditing(true) 

// Objective C 
[self.view endEditing:YES]; 
0
-(void)textFieldDidBeginEditing:(UITextField *)textField 
{ 
    // your code 

    [textField reloadInputViews]; 
} 
-1
  1. Configure el "puso fin al salir "evento en Xcode (haga clic derecho en su campo de texto).

    Screenshot

  2. Darse cuenta de este método:

    -(IBAction) closeKeyboard:(id) sender { 
        [_txtField resignFirstResponder]; 
    } 
    
1

Para Swift 3

Puede ocultar el teclado como esto:

textField.resignFirstResponder() 

Si desea ocultar el teclado cuando el usuario pulse el botón "Intro", usted tiene que poner en práctica el método de UITextFieldDelegate siguiente:

func textFieldShouldReturn(_ textField: UITextField) -> Bool { 

    textField.resignFirstResponder() 

    return true 
} 
Cuestiones relacionadas