Me gustaría saber el código más sencillo para despedir el teclado numérico del teclado al tocar en cualquier lugar fuera del teclado numérico. Es una sencilla aplicación para la entrada de un número dentro de un campo de texto y, a continuación, un usuario puede descartar el teclado después de que el usuario termina de escribir los números en el campo de texto. Gracias! 🙂

InformationsquelleAutor jsanmtosj | 2011-08-09

14 Comentarios

  1. 85

    Declarar el campo de texto como variable de instancia o de la propiedad si no lo está ya y la implementación de un método simple como esto:

    - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 
    {
        [textField resignFirstResponder];
    }

    va a hacer muy bien.

    • Gracias por este fichek. Esta es la manera más sencilla hasta la fecha para despedir el teclado. 🙂
    • Thnx Este es un trabajo para mí…
    • No funciona tan bien si el usuario toca otro de control (y no el fondo).
    • Es allí cualquier manera de manejar el despedir de teclado numérico cuando externo bluetooth teclado está conectado? Golpear tecla retorno del teclado externo no desencadenar textFieldShouldReturn delegado como no hay ninguna tecla de retorno para el teclado numérico
  2. 21

    Probar este método,

    -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
    {
       [self.view endEditing:YES];
    }

    Ahora, toque en cualquier lugar y ver el teclado va a despedir. 🙂

    • esto es mejor que el aceptado respuesta.
    • No tengo ni idea de cómo me perdí esta llamada a la API, pero esta es la más correcta respuesta aquí.
    • SOOOO mucho mejor
    • Mejor que el aceptado respuesta para asegurarse de
  3. 7

    Para Swift Utilizar A Continuación El Código

    override func touchesBegan(touches: NSSet, withEvent event: UIEvent)
     {
           textFiled.resignFirstResponder()
     }

    Retirar última actualización en los siguientes Enlace

    • Gracias. Me alegra ver una respuesta rápida en aquí
    • Bienvenido @ZackShapiro
    • touchesBegan ha sido actualizado. Si usted tiene problemas, checkout stackoverflow.com/questions/28771896/….
    • Ahora la función lee override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?)
    • acabo de editar mi respuesta y enviar su sugerencia…
  4. 6

    Tocar el Fondo para Cerrar el Teclado

    Ir a Xcode si no está ya allí. Tenemos que añadir uno más a nuestra clase de controlador. Agregue la siguiente línea a su Control_FunViewController.h archivo:

    #import <UIKit/UIKit.h>
    @interface Control_FunViewController : UIViewController { 
    UITextField *nameField;
    UITextField *numberField;
    }
     @property (nonatomic, retain) IBOutlet UITextField *nameField; ]
    @property (nonatomic, retain) IBOutlet UITextField *numberField; 
    - (IBAction)textFieldDoneEditing:(id)sender; 
    - (IBAction)backgroundTap:(id)sender; 
    @end  

    Guardar el archivo de encabezado; cambie el archivo de implementación, y añadir este código, que simplemente le dice a ambos campos de texto para producir la primera respuesta de estado, si lo tienen. Es perfectamente seguro para llamar a resignFirstResponder en un control que no es la primera respuesta, por lo que podemos llamar de forma segura en ambos campos de texto sin tener que comprobar si es la primera respuesta.

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

    PUNTA
    Guardar este archivo y volver a la Interface Builder. Ahora tenemos que cambiar la clase subyacente de nuestro punta de vista. Si se mira la punta de la ventana principal , usted verá que hay tres iconos en la vista. El tercero, llamado punto de Vista, es nuestra punta de la vista principal que contiene todos los controles y puntos de vista como subvistas.
    Solo haga clic en el icono llamado la Vista, que representa nuestra punta de contenedores de vista. Pulse ␣4 a llevar a la identidad del inspector. Aquí es donde podemos cambiar la clase subyacente de cualquier instancia de objeto en el Interface Builder.

    Podrás cambiar entre encabezado y archivos de implementación mucho como código. Afortunadamente, Xcode tiene una combinación de teclas que cambiará entre estos archivos de forma rápida. La combinación de teclas predeterminada es ␣␣␣ (opción-comando-flecha arriba), aunque se puede cambiar a cualquier cosa que usted desee utilizando Xcode preferencias.76

    El campo de la etiqueta de la Clase actualmente dice UIView. Cambiar para que se lea UIControl. Todos los controles que son capaces de activar los métodos de acción son subclases de UIControl, así que por el cambio de la clase subyacente, que nos han dado este punto de vista la capacidad para activar la acción de los métodos. Usted puede verificar esto presionando ␣2 para abrir el inspector de conexiones.

    Arrastre desde el Contacto con el evento para el Dueño del Archivo de icono, y elija la backgroundTap: acción. Ahora, toca en cualquier lugar de la vista sin necesidad de un control activo activará nuestro nuevo método de acción, lo que hará que el teclado se retraiga.

    NOTA
    Guardar la punta, y vamos a volver atrás e intentarlo. Compilar y ejecutar la aplicación de nuevo. Esta vez, el teclado debe desaparecer no sólo cuando el botón Hecho es aprovechar, pero también cuando se haga clic en cualquier lugar que no sea un control activo, que es el comportamiento que el usuario va a esperar.

    • Gracias por este señor rptwsthi! 🙂 Se agradecen tus post.
  5. 3

    Traté de implementar algunas de las soluciones aquí y se encontró que hubo algunos problemas con ellos. En particular, Mi UIView contiene un UIScrollView, que aparece para interceptar toca.

    Cuando eso no, yo consideraba que «pulsando en cualquier lugar» es un poco de un comportamiento no especificado, que requieren que el usuario adivinar cómo descartar el teclado en lugar de darles una orientación clara.

    También, tengo un «Retorno» o el botón «Done» en cada una de las otras teclado muestro en la aplicación, así que estaba decidido a dar al usuario una forma fácil, intuitiva, claramente especificado manera de despedir el teclado con un teclado numérico que estaba en línea con otros teclado el despido de los mecanismos en uso.

    Me doy cuenta de que esto no es lo que el OP está solicitando específicamente, pero creo que para ser una mejor solución que la «llave» en cualquier lugar» la solicitud (y es fácil de aplicar!).

    El código siguiente se llama como parte de -viewDidLoad en mi UIViewController.

    //My app is restricted to portrait-only, so the following works
    UIToolbar *numberPadAccessoryInputView      = [[UIToolbar alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, 44.0f)];
    
    //My app-wide tint color is a gold-ish color, so darkGray contrasts nicely
    numberPadAccessoryInputView.barTintColor    = [UIColor darkGrayColor];
    
    //A basic "Done" button, that calls [self.textField resignFirstResponder]
    UIBarButtonItem *numberPadDoneButton        = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self.textField action:@selector(resignFirstResponder)];
    
    //It's the only item in the UIToolbar's items array
    numberPadAccessoryInputView.items           = @[numberPadDoneButton];
    
    //In case the background of the view is similar to [UIColor darkGrayColor], this
    //is put as a contrasting edge line at the top of the UIToolbar
    UIView *topBorderView                       = [[UIView alloc] initWithFrame:CGRectMake(0, 0, numberPadAccessoryInputView.frame.size.width, 1.0f)];
    topBorderView.backgroundColor               = [UIColor whiteColor];
    [numberPadAccessoryInputView addSubview:topBorderView];
    
    //Make it so that this UITextField shows the UIToolbar
    self.textField.inputAccessoryView           = numberPadAccessoryInputView;

    Con eso, hay un bonito, bonito, control intuitivo añadido a la parte superior del teclado que indica claramente cómo el usuario debe proceder cuando hayan terminado con su entrada de texto.

    Todavía creo que Apple debería proporcionar un botón «Done» para este teclado (como el enlace publicado por Janak Nirmal), pero este es el más elegante de la no-solución de Apple para mí.

    • Super slick. Gracias!
  6. 2

    Debe utilizar UITapGestureRecognizer para lograr esto.

    UITapGestureRecognizer *tapToDismiss = [[UITapGestureRecognizer alloc]initWithTarget: self action: @selector (dismissNumberKeyBoard:)];

    A continuación, en su dismissNumberKeyboard método,

    -(Void)dismissNumberKeyboard : (id)sender {
    
       [yourTextField resignFirstResponder];
    
    }

    Feliz codificación!

  7. 2

    Puede implementar @mbm la respuesta muy bien por poner un didSet en la toma de corriente y conectar su inputAccessoryView allí:

    Código Swift:

      @IBOutlet var input: UITextField! { didSet {
        let toolbar = UIToolbar(frame: CGRect(origin: CGPoint.zero, size: CGSize(width: 0, height: 44)))
        toolbar.items = [
          UIBarButtonItem(barButtonSystemItem: .done, target: self.input,
            action: #selector(resignFirstResponder))
        ]
        input.inputAccessoryView = toolbar
      }}

    En xcode 8 /iOS 10 Se termina buscando algo como esto:

    Cómo descartar teclado numérico teclado tocando en cualquier lugar

  8. 1

    Acaba de hacer una simple función como este..

        -(IBAction)hideKeyboard:(id)Sender
    {
        [_textValue resignFirstResponder];
    }

    ahora ir a ur archivo nib y conectar esta función con el textfield con didEndOnExit y que son buenos para ir. Ahora, cuando u se haga clic fuera de ur textfield el teclado se oculta.

  9. 0

    Normalmente, cuando el usuario toca en el botón ‘Cancelar’, yo uso este para despedir el Teclado

    - (void)searchBarCancelButtonClicked:(UISearchBar *) searchBar
    {
        NSLog(@"cancel clicked");
        [searchBar resignFirstResponder]; //dismiss keyboard
        return;
    }

    Si quieres hacer esto para cuando el usuario toca en cualquier lugar fuera del área de teclado, entonces usted necesita para implementar touchesEnded & poner este código no –

    /* Delegate for when touch ends.  */
    -(void)touchesEnded:(NSSet *)touches 
              withEvent:(UIEvent *)event
    {
        [searchBar resignFirstResponder];
    }

    Yo mismo no he probado este, pero me recon esto debe hacer el truco…

  10. 0

    Tuve que implementar un similar UX para mi UITableView (dentro de la cual aparece un UITextField). En primer lugar, añadir un UITapGestureRecognizer para el formato tableview. Esto comenzará a coger todas las derivaciones que se producen a partir de ahora.

    UITapGestureRecognizer* tapGestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTap:)];
            [self.tableView addGestureRecognizer:tapGestureRecognizer];
            [tapGestureRecognizer release];

    El efecto secundario es, sin embargo, que no se quiere despedir el teclado cuando el usuario pulsa en el UITextField sí mismo. Así, este caso tiene que ser distinguido.

    La handleTap la implementación del método se ve algo como-

    /*
     In the text editing mode, listens to all taps occurring on the table view to exit the mode. There are two special cases to consider:
     a) Text field's clear button
     b) Text field
     */
    -(void)handleTap:(UITapGestureRecognizer*)tapRecognizer 
    {
        if(tapRecognizer.state == UIGestureRecognizerStateEnded) 
        {
    
                //Figure out where the user tapped
                CGPoint p = [tapRecognizer locationInView:textField];
                CGRect textFieldBounds = textField.bounds;
                CGRect clearButtonBounds = CGRectMake(textFieldBounds.origin.x + textFieldBounds.size.width - 44, textFieldBounds.origin.y, 44, textFieldBounds.size.height); 
    
                if(CGRectContainsPoint(clearButtonBounds, p))
                    textField.text = @"";
    
                if(CGRectContainsPoint(textFieldBounds, p))
                    return;
    
            [textField resignFirstResponder];
            //remove the tap gesture recognizer that was added.
            for(id element in self.tableView.gestureRecognizers)
            {
            if([element isKindOfClass:[UITapGestureRecognizer class]])
            {
                [self.tableView removeGestureRecognizer:element];
            }
            }
        }
            [self commitNewText];
        }
    }

    HTH. Marca la respuesta si te gusta.

    -Akshay

  11. 0

    Si usted ha hecho una costumbre numérico o de otra ventana emergente, otra solución sería el uso de un gesto de reconocimiento en el inicio de su UIView como este:

    tapper = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleSingleTap:)];
    tapper.cancelsTouchesInView = NO;
    [self addGestureRecognizer:tapper];
    
     _yourViewController = [[CustomViewController alloc] init];
    _yourPopoverController = [[UIPopoverController alloc] initWithContentViewController:_yourViewController];
    _yourPopoverController.popoverContentSize = CGSizeMake(550, 300);
    _yourViewController.delegate = self;

    Y tienen la handleSingleTap descartar la ventana emergente si son visibles y despedir la edición:

    - (void)handleSingleTap:(UITapGestureRecognizer *) sender
    {
        if ([_yourPopoverController isPopoverVisible]) {
            [_yourPopoverController dismissPopoverAnimated:YES];
        }
    
        [self endEditing:YES];
    }
  12. 0

    En xcode 5 Utilice un Toque Gesto de Reconocimiento y declarar en el .h con la acción eligió un nombre y en .m

    - (IBAction)backgroundTap:(id)sender {
        [self.view endEditing: YES];
    }
  13. 0

    Un montón de respuestas aquí, pero todavía tenía que luchar para descifrarlo utilizando XCode 5.
    Leer esto:
    https://developer.apple.com/library/ios/documentation/EventHandling/Conceptual/EventHandlingiPhoneOS/GestureRecognizer_basics/GestureRecognizer_basics.html

    Añadir un Toque Gesto de Reconocimiento a su UIScrollView. Establezca su delegado a ser el viewcontroller.

    Agregar este método:

    - (IBAction)tappedSomewhere:(id)sender {
        [self.view endEditing:YES];
    }

    a su UIScrollView código de implementación y asociarla al Toque Gesto de Reconocimiento por parte de control haga clic y arrastrando el código de implementación.

    Trabajó para mí.

  14. 0

    Para Swift, la forma más fácil para despedir a un teclado para todos los campos de texto tocando en cualquier lugar fuera del campo de texto es:

    override func touchesBegan(touches: NSSet, withEvent event: UIEvent)
    {
        self.view.endEditing(true)
    }

Dejar respuesta

Please enter your comment!
Please enter your name here