teclado tamaño puedo gboard escribir descargar configurar cambiar aumentar iphone ios xcode numbers uitextfield

iphone - tamaño - Cómo descartar el teclado del teclado numérico tocando en cualquier lugar



teclado iphone 7 (15)

Tocando el fondo para cerrar el teclado

Ve a Xcode si aún no estás allí. Necesitamos agregar una acción más a nuestra clase de controlador. Agregue la siguiente línea a su archivo Control_FunViewController.h:

#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

Guarde el archivo de encabezado; cambie al archivo de implementación y agregue este código, que simplemente dice a ambos campos de texto que den el estado de la primera persona que responde si lo tiene. Es perfectamente seguro llamar a resignFirstResponder en un control que no es el primero en responder, por lo que podemos llamarlo de manera segura en ambos campos de texto sin tener que verificar si el primero responde.

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

CONSEJO Guarde este archivo y vuelva a Interface Builder. Ahora necesitamos cambiar la clase subyacente de nuestra vista de punta. Si miras la ventana principal de la punta, verás que hay tres íconos en esa vista. El tercero, llamado Vista, es la vista principal de nuestra punta que contiene todos los otros controles y vistas como subvistas. Haz clic en el ícono llamado Ver, que representa la vista de contenedor de nuestra plumilla. Presione ␣4 para abrir el inspector de identidad. Aquí es donde podemos cambiar la clase subyacente de cualquier instancia de objeto en Interface Builder.

Cambiará entre el encabezado y los archivos de implementación mucho a medida que codifica. Afortunadamente, Xcode tiene una combinación de teclas que lo cambiará entre estos archivos rápidamente. La combinación de teclas predeterminada es ␣␣␣ (opción-flecha de comando-arriba), aunque puede cambiarla a cualquier cosa que desee utilizando las preferencias de Xcode.76

El campo etiquetado Clase actualmente dice UIView. Cámbielo para leer UIControl. Todos los controles que son capaces de desencadenar métodos de acción son subclases de UIControl, por lo que al cambiar la clase subyacente, acabamos de darle a esta vista la capacidad de activar métodos de acción. Puede verificar esto presionando ␣2 para abrir el inspector de conexiones.

Arrastre desde el evento Touch Down al ícono del propietario del archivo y elija backgroundTap: action. Ahora, tocar en cualquier parte de la vista sin un control activo activará nuestro nuevo método de acción, que hará que el teclado se retraiga.

NOTA Guarde el plumín, y regresemos y lo probemos. Compila y ejecuta tu aplicación nuevamente. Esta vez, el teclado debería desaparecer no solo cuando se toca el botón Hecho, sino también cuando se hace clic en cualquier lugar que no sea un control activo, que es el comportamiento que su usuario esperará.

Me gustaría saber el código más simple para descartar el teclado del teclado numérico al tocar en cualquier lugar fuera del teclado numérico. Es una aplicación simple para ingresar un número dentro de un campo de texto y luego un usuario puede cerrar el teclado después de que el usuario termine de escribir los números en el campo de texto. ¡Gracias! :)


Debe usar UITapGestureRecognizer para lograr esto.

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

Luego, en su método dismissNumberKeyboard,

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

Feliz codificación!


Declarar el campo de texto como variable de instancia o propiedad si aún no está e implementar un método simple como este:

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

lo hará bien.


En xcode 5 Use un Tap Gesture Recognizer y declare en el archivo .h con action elija un nombre y en .m

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


Intenté implementar algunas de las soluciones aquí y descubrí que había algunos problemas con ellas. Notablemente, Mi UIView contiene un UIScrollView , que parece interceptar toques.

Cuando eso falló, consideré que "tocar en cualquier parte" es un comportamiento poco especificado que requiere que el usuario adivine cómo descartar el teclado en lugar de darles una guía clara.

Además, tengo un botón "Volver" o "Hecho" en todos los demás teclados que se muestran en la aplicación, así que estaba decidido a darle al usuario una manera fácil, intuitiva y claramente especificada de descartar el teclado con un teclado numérico que era en línea con los otros mecanismos de descarte de teclado en uso.

Me doy cuenta de que esto no es lo que el OP solicita específicamente, pero creo que es una mejor solución que la solicitud de "tocar en cualquier lugar" (¡y es fácil de implementar!).

El siguiente código 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 control bonito, bonito e intuitivo agregado a la parte superior del teclado que indica claramente cómo debe proceder el usuario cuando termina su entrada de texto.

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


Muchas respuestas aquí, pero todavía tenía que luchar para resolverlo con XCode 5. Lea esto: https://developer.apple.com/library/ios/documentation/EventHandling/Conceptual/EventHandlingiPhoneOS/GestureRecognizer_basics/GestureRecognizer_basics.html

Agregue un reconocedor de gestos Tap a su UIScrollView. Establezca su delegado para ser el controlador de vista.

Agrega este método:

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

a su código de implementación UIScrollView y asócielo al Tap Gesture Recognizer haciendo clic en el control y arrastrando hasta el código de implementación.

Trabajó para mi.


Normalmente, cuando el usuario toca el botón ''Cancelar'', yo uso esto para descartar el teclado -

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

Si desea hacer esto para cuando el usuario toque en touchesEnded lugar fuera del área del teclado, entonces necesita implementar touchesEnded y poner este código allí:

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

Yo mismo no lo he probado, pero reconozco que esto debería ser el truco ...


Para Swift Use Below Code

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

Consulte la última actualización en el siguiente Link


Para Swift, lo más fácil para descartar el 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) }


Para swift 3/4 me gusta este caso:

  1. View Controller es la subclase de UITextFieldDelegate
  2. En la función viewDidLoad, debe configurar yourPhonePadField.delegate = self
  3. Y anula esta función:

    override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) { self.view.endEditing(true) }


Prueba este método,

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

Ahora toque en cualquier lugar y verá que el teclado se desactivará. :-)


Puede implementar la respuesta de @ mbm muy bien poniendo un didSet en la toma de corriente y adjuntando 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, termina luciendo algo como esto:


Si ha creado un teclado numérico personalizado u otro panel emergente, otra solución sería usar un reconocedor de gestos en el inicio de su UIView de la siguiente manera:

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 tenga el handleSingleTap descartar el popover si es visible y descartar la edición:

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


Solo realiza una función simple como esta ...

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

ahora vaya a ur nib file y conecte esta función con el campo de texto con didEndOnExit y didEndOnExit listo. Ahora cuando haga clic fuera de su campo de texto, el teclado se ocultará.


Tuve que implementar un UX similar para mi UITableView (dentro del cual aparece un UITextField). Primero, agregue un UITapGestureRecognizer a tableView. Esto comenzará a atrapar todos los grifos que ocurran a partir de ahora.

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

Sin embargo, el efecto secundario es que no desea descartar el teclado cuando el usuario toca el UITextField mismo. Entonces, este caso tiene que ser distinguido.

La implementación del método handleTap tiene el siguiente aspecto:

/* 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. Marqúelo como la respuesta si le gusta.

-Akshay