Tengo una UIView con varios cuadros de texto. Ahora he utilizado los delegados para cambiar el respondedor a partir de campo de texto a otro. En este caso mi teclado desaparece cuando el usuario llega a la última campo de texto.

pero ahora quiero ocultar mi teclado cuando el usuario toca UIView(toques en cualquier lugar en la pantalla, aparte de los cuadros de texto). ¿Alguien que me ayude con esto.

Gracias

InformationsquelleAutor nbojja | 2009-06-08

11 Comentarios

  1. 43

    Uso resignFirstResponder en touchesBegan, así:

    - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
        UITouch * touch = [touches anyObject];
        if(touch.phase == UITouchPhaseBegan) {
            [self.myTextField resignFirstResponder];
        }
    }

    Deberá llamar a esto en varios campos de texto si usted no está seguro de que el foco se encuentra actualmente; yo no he probado ese caso.

    Además, en el Interface Builder, tendrás que habilitar la «Interacción con el Usuario Habilitado» casilla de verificación para la vista, o a través de programación de uso:

    myView.userInteractionEnabled = YES;
    • Pero a dónde llamar a este resignFirstResponder. Cómo saber el usuario tocado el UIView???
    • He editado el post para incluir un ejemplo dentro de touchesBegan.
    • Hola..Gracias por su ayuda..funcionó bien con UIView. Pero tengo otro escenario donde tengo cuadros de texto en UITableView. en este caso, su código no está funcionando. Soy muy nuevo en el desarrollo de iPhone, así que por favor……
    • Si usted quiere saber lo que el control de la llamada resignFirstResponder, puedes utilizar isFirstResponder. Así que en mi código que yo llamo «si ([myTextField isFirstResponder]) [myTextField resignFirstResponder]; else if…». Podría ser más sistemática y recorrer las subvistas, buscar opiniones/controles que se UIResponder y hacer la misma comprobación que el anterior.
    • thaaaaaaannnnnnk usted 🙂 comentario: no funciona con UIScrollViews
    • O usted puede llamar a [UIApplication.sharedApplication sendAction:@selector(resignFirstResponder) a:nil de:nil forEvent:nil]; si usted no sabe que textField es de primera respuesta

  2. 25

    A llamar a este en su punto de vista controlador cuando se desea ocultar el teclado.

    [self.view endEditing:NO];

    • Gracias hombre! Salvó mi día a lo grande. 🙂 🙂
  3. 14

    Yo uso

    -(void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
         UITouch *touch = [touches anyObject];
         if(touch.phase==UITouchPhaseBegan){
             //find first response view
             for (UIView *view in [self.view subviews]) {
                 if ([view isFirstResponder]) {
                     [view resignFirstResponder];
                     break;
                 }
             }
         }
    }
    • Simple, conciso, y totalmente genérico. Muy bonito!
  4. 3

    Según Principio de Desarrollo de iPhone, se dibuja una ronda rect botón, de manera que cubra la totalidad de su interfaz de usuario; la pantalla completa. A continuación, vaya a la Diseño menú y haga clic en Enviar al fondo. A continuación, en el inspector, el botón cambiar tipo de ronda rect a Personalizado. Ahora agregue un toque dentro del evento a este botón y adjuntarlo a un método que se encarga de ello. En el cuerpo de este método, asegúrese de que usted tiene las declaraciones:

    [myTextFieldOne resignFirstResponder];
    [myTextFieldTwo resignFirstResponder];

    Básicamente enviar el resignFirstResponder mensaje a cada uno de sus campos de texto, o cualquier campo que puede producir un teclado.

    Realidad, soy realmente nuevo en el SDK del iPhone. No sé si este es el mejor método, pero funciona y es lo que he aprendido de el libro citado. Espero que ayude.

    • ¿Estás seguro que tu sugerencia no cumplen con el patrón MVC?
  5. 3

    Un súper fácil manera de hacerlo es trabajando en lo que PCheese dijo.

    - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    UITouch * touch = [touches anyObject];
    if(touch.phase == UITouchPhaseBegan) {
        [self.view endEditing:YES];
    }

    }

    He usado anteriormente [self.view endEditing:YES]; para un evento de botón, pero cuando se combina con la respuesta anterior que funciona de maravilla. Mucho más fácil, y usted no tiene que hacer nada más – sólo tienes que poner en tu .m archivo. Además, esto funciona con todos (al menos, hasta donde yo he visto) los campos de texto (obras para UITextField y UITextView).

    Sé OP probablemente no necesita de esto, pero solo quiero compartir para que otros con el mismo problema.

  6. 2

    Gracias Blaenk, yo estaba tratando de averiguar cómo hacer esto y no se dio cuenta que yo podría poner un botón en el fondo, buen truco! Aquí está mi contribución (nuevo en este sitio y Cocoa Touch por lo que puede no ser el más robusto código nunca, pero funciona tan lejos…):

    Puedo llamar a este método desde el touchUpInside evento en mi UIButton:

    -(void)closeKeyboard:(id)sender {
        UIView *theFirstResponder = [self findFirstResponder];
        if (theFirstResponder) {
            [theFirstResponder resignFirstResponder];
        }
    }

    Donde este bucle se encuentra el firstResponder:

    - (UIView *)findFirstResponder {  
        UIView *firstResponderView = nil;
        for (UIView *view in [self entryFields]) {  
            if ([view isFirstResponder]) {  
                firstResponderView = view;
                break;
            }
        }   
        return firstResponderView;  
    }

    Es depende de cada uno de los UITextField controles en la vista de tener un etiqueta asignados a ellos (de nuevo, puede hacer que en el Interface Builder).

    Mis dos centavos de todos modos, aunque me gustaría dar algo de vuelta!

  7. 2

    ASÍ que yo le daba vueltas a esto y me lo imaginé..

    usted no necesita el otro botón ni nada.

    Todo lo que necesita hacer es seleccionar los Archivos de «propietario», en el inspector de arrastre de su textField a la salida (o cualquier nombre) a su actual textfield (a través de lo que denominó) Este será en adición a cualquiera de las entradas que ya tenía cable.

    y por supuesto además del Control de salida (UIview cambiado a UIControl a través de inspector) para los archivos de propietario a través de backgroundtouched…la primera cosa que todos tratamos de

  8. 1

    La forma más adecuada de resolver este problema es mediante el siguiente método:

    - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
    {
        UITouch *touch = [touches anyObject];
        if(![touch.view isMemberOfClass:[UITextField class]]) {
            [touch.view endEditing:YES];
        }
    }

    Nota: Esto no funciona en UIScrollView instancias.

  9. 1

    Cambiar la clase UIView a la clase UIControl a partir de la identificación de la ficha de inspector.
    Añadir esto:

    - (IBAction)tabBackground:(id) sender;

    a su .h archivo.

    Agregar esto a su .m de archivo:

    - (IBAction)tabBackgroup:(id) sender {
        [nameField resignFirstRespnder];
        [numberField resignFirstResponder];
    }

    Conectar su tabBackground de el inspector, acción recibió la sección para el UIView (que es un UIControl) y ya está bueno para ir.

  10. 0

    Para swift 4.0

        override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
        let touch = touches.first
        if touch?.phase == UITouchPhase.began {
            touch?.view?.endEditing(true)
        }
    }

Dejar respuesta

Please enter your comment!
Please enter your name here