iphone - sale - Ocultar el teclado cuando el usuario toca uiview
se traba el teclado en whatsapp (11)
Así que estuve agonizando por esto y lo descubrí ...
No necesitas el otro botón ni nada.
Todo lo que necesita hacer es seleccionar "Propietario de archivos", en el arrastre del inspector desde su salida textField (o como se le haya nombrado) a su campo de texto real (a través de lo que haya nombrado). arriba.
y, por supuesto, además de la salida de Control (UIview se cambió a UIControl a través del inspector) al propietario de los archivos a través de backgroundtouched ... lo primero que intentamos
Tengo un UIView con múltiples cuadros de texto. Ahora he usado delegados para cambiar el respondedor de un campo de texto a otro. En este caso, mi teclado desaparece cuando el usuario llega al último campo de texto.
pero ahora quiero ocultar mi teclado cuando el usuario toca UIView (toca en cualquier lugar de la pantalla, aparte de los cuadros de texto). Puede alguien ayudarme con esto.
Gracias
Cambie la clase UIView a class UIControl desde la pestaña de identificación del inspector. Agrega esto:
- (IBAction)tabBackground:(id) sender;
a su archivo .h.
Agregue esto a su archivo .m:
- (IBAction)tabBackgroup:(id) sender {
[nameField resignFirstRespnder];
[numberField resignFirstResponder];
}
Conecte su tabBackground del inspector, la sección de acción recibida a UIView (que es un UIControl) y estará listo.
De acuerdo con Beginning iPhone Development , dibuja un botón redondo para que cubra toda su interfaz de usuario; La pantalla completa. Luego, vaya al menú Diseño y haga clic en Enviar a Atrás . Luego, en el inspector, cambie el tipo de botón de round rect a Custom . Ahora agregue un retoque dentro del evento a este botón y adjúntelo a un método que lo maneje. Dentro del cuerpo de este método, asegúrate de tener las siguientes afirmaciones:
[myTextFieldOne resignFirstResponder];
[myTextFieldTwo resignFirstResponder];
Básicamente, envíe el mensaje resignFirstResponder
a cada uno de sus campos de texto, o cualquier campo que pueda producir un teclado.
En realidad soy realmente nuevo en el iPhone SDK. No sé si este es el mejor método, pero funciona y es lo que aprendí del libro mencionado anteriormente. Espero eso ayude.
Gracias Blaenk, estaba tratando de averiguar cómo hacer esto y no me di cuenta de que podía poner un botón en el fondo, ¡buen truco! Aquí está mi contribución (nueva en este sitio y en Cocoa Touch, por lo que puede que no sea el código más robusto, pero está funcionando hasta ahora ...):
Llamo a este método desde el evento touchUpInside
en mi UIButton:
-(void)closeKeyboard:(id)sender {
UIView *theFirstResponder = [self findFirstResponder];
if (theFirstResponder) {
[theFirstResponder resignFirstResponder];
}
}
Donde este bucle encuentra el firstResponder:
- (UIView *)findFirstResponder {
UIView *firstResponderView = nil;
for (UIView *view in [self entryFields]) {
if ([view isFirstResponder]) {
firstResponderView = view;
break;
}
}
return firstResponderView;
}
Depende de que cada uno de los controles de UITextField
en la vista tenga una etiqueta asignada (de nuevo, puede hacerlo en Interface Builder).
Mis dos centavos de todos modos, aunque es mejor que devuelva algo!
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 instancias de UIScrollView.
Simplemente llame a esto en su controlador de vista cuando quiera ocultar el teclado.
[self.view endEditing:NO];
Una forma muy fácil de hacer esto es trabajar en lo que dijo PCheese.
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
UITouch * touch = [touches anyObject];
if(touch.phase == UITouchPhaseBegan) {
[self.view endEditing:YES];
}
}
Anteriormente utilicé [self.view endEditing:YES];
para un evento de botón, pero cuando se combina con la respuesta anterior funciona a gusto. Mucho más fácil, y no tiene que hacer nada más, simplemente póngalo en su archivo .m. Además, esto funciona con todos los campos de texto (al menos, por lo que he visto) (funciona para UITextField y UITextView).
Sé que OP probablemente no necesitará esto, pero solo quiero compartirlo con otros con el mismo problema.
Usa resignFirstResponder en toquesBegan, así:
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
UITouch * touch = [touches anyObject];
if(touch.phase == UITouchPhaseBegan) {
[self.myTextField resignFirstResponder];
}
}
Es posible que deba llamar a esto en varios campos de texto si no está seguro de dónde se encuentra el enfoque actualmente; No he probado ese caso.
Además, en Interface Builder, deberá habilitar la casilla de verificación "Interacción del usuario habilitada" para la vista, o usar programáticamente:
myView.userInteractionEnabled = YES;
funciona para mi
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
[self.view endEditing:NO];
}
solo necesito en self.view tener un UItextField
http://objdev.com/2013/11/Dismissing-iOS-Keyboard-Self-View-EndEditing
yo suelo
-(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;
}
}
}
}
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)
}
}