Cómo descartar el keyboard iOS mediante progtwigción

UITextField un UITextField programáticamente haciendo UITextField una propiedad del viewController. Necesito descartar el keyboard con el retorno y el toque en la pantalla. Pude get la pantalla táctil para cerrar, pero al presionar return no funciona.

He visto cómo hacerlo con storyboards y al asignar e inicializar el object UITextField directamente sin crearlo como una propiedad. ¿Posible hacer? Soy un novato – lo siento!

 .h #import <UIKit/UIKit.h> @interface ViewController : UIViewController <UITextFieldDelegate> @property (strong, atomic) UITextField *username; @end .m #import "ViewController.h" @interface ViewController () @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. self.view.backgroundColor = [UIColor blueColor]; self.username = [[UITextField alloc] initWithFrame:CGRectMake(100, 25, 80, 20)]; self.username.placeholder = @"Enter your username"; self.username.backgroundColor = [UIColor whiteColor]; self.username.borderStyle = UITextBorderStyleRoundedRect; if (self.username.placeholder != nil) { self.username.clearsOnBeginEditing = NO; } _username.delegate = self; [self.view addSubview:self.username]; [_username resignFirstResponder]; } - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{ NSLog(@"touchesBegan:withEvent:"); [self.view endEditing:YES]; [super touchesBegan:touches withEvent:event]; } @end 

La forma simple es conectar al delegado de UITextField con self ( self.mytestField.delegate = self ) y descartar el keyboard en el método textFieldShouldReturn usando [textField resignFirstResponder];

Otra forma de descartar el keyboard es la siguiente:

 [self.view endEditing:YES]; 

Ponga [self.view endEditing:YES]; donde desea descartar el keyboard (evento de button, evento de toque, etc.).

Agregue un método delegado de UITextField como este:

 @interface MyController : UIViewController <UITextFieldDelegate> 

Y configure su textField.delegate = self; luego también agregue dos methods delegates de UITextField

 - (BOOL)textFieldShouldBeginEditing:(UITextField *)textField { return YES; } // It is important for you to hide the keyboard - (BOOL)textFieldShouldReturn:(UITextField *)textField { [textField resignFirstResponder]; return YES; } 

// Ocultar keyBoard tocando background en vista

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

simplemente use esto rápidamente para descartar el keyboard:

 UIApplication.shanetworkingApplication().sendAction("resignFirstResponder", to:nil, from:nil, forEvent:nil) 

Swift 3

 UIApplication.shanetworking.sendAction(#selector(UIResponder.resign‌​FirstResponder), to: nil, from: nil, for: nil) 

Intente get una idea acerca de qué es una primera respuesta en la jerarquía de vista de iOS. Cuando su campo de text se activa (o primer respondedor) cuando toca el interior (o lo pasa por messasge becomeFirstResponder progtwigción), presenta el keyboard. Entonces, para eliminar su campo de text de ser el primer respondedor, debe pasar el post resignFirstResponder allí.

 [textField resignFirstResponder]; 

Y para ocultar el keyboard en su button de retorno, debe implementar el método delegate textFieldShouldReturn: y pasar el post resignFirstResponder .

 - (BOOL)textFieldShouldReturn:(UITextField *)textField{ [textField resignFirstResponder]; return YES; } 

Esto es lo que uso en mi código. ¡Funciona a las mil maravillas!

En yourviewcontroller.h agregue:

@property (nonatomic) UITapGestureRecognizer *tapRecognizer;

Ahora en el file .m, agregue esto a su function ViewDidLoad:

 - (void)viewDidLoad { [super viewDidLoad]; //Keyboard stuff tapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleSingleTap:)]; tapRecognizer.cancelsTouchesInView = NO; [self.view addGestureRecognizer:tapRecognizer]; } 

Además, agregue esta function en el file .m:

 - (void)handleSingleTap:(UITapGestureRecognizer *) sender { [self.view endEditing:YES]; } 

En el Delegado de la aplicación, puede escribir

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

use de esta manera, no puede escribir demasiado código.

Para descartar un keyboard después de que el keyboard haya aparecido, hay 2 casos ,

  1. cuando el UITextField está dentro de un UIScrollView

  2. cuando el UITextField está fuera de un UIScrollView

2. cuando el UITextField está fuera de un UIScrollView, anula el método en su subclass UIViewController

También debe agregar delegado para todos UITextView

 - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { [self.view endEditing:YES]; } 
  1. En una vista de desplazamiento, Tapping outside no disparará ningún evento , por lo que en ese caso use un Tap Gesture Recognizer , arrastre y suelte una UITapGesture para la vista de desplazamiento y cree una IBAction para ello .

para crear una IBAction, presione Ctrl + click UITapGesture y arrástrelo al file .h de viewcontroller.

Aquí he nombrado a tappedEvent como mi nombre de acción

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

La información dada se derivó del siguiente enlace, por favor refiérase para más información o contácteme si no comprende los datos de Abouve.

http://samwize.com/2014/03/27/dismiss-keyboard-when-tap-outside-a-uitextfield-slash-uitextview/

Para un grupo de UITextView s dentro de ViewController :

Swift 3.0

 for view in view.subviews { if view is UITextField { view.resignFirstResponder() } } 

C objective

 // hide keyboard before dismiss for (UIView *view in [self.view subviews]) { if ([view isKindOfClass:[UITextField class]]) { // no need to cast [view resignFirstResponder]; } } 

Primero debe agregar el delegete de campo de text en el file .h. si no declara (BOOL)textFieldShouldReturn:(UITextField *)textField este método no se llama. así primero agregue delegado y escriba el keyboard oculte el código en ese método.

 - (BOOL)textFieldShouldReturn:(UITextField *)textField { [textField resignFirstResponder]; return YES; } 

testing este …

Así que esto es lo que hice para hacer que desaparezca después de tocar background o regresar. Tuve que agregar delegate = self en viewDidLoad y luego también los methods delegates más adelante en los files .m.

 .h #import <UIKit/UIKit.h> @interface ViewController : UIViewController <UITextFieldDelegate> @property (strong, atomic) UITextField *username; @end .m - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. self.view.backgroundColor = [UIColor blueColor]; self.username = [[UITextField alloc] initWithFrame:CGRectMake(100, 25, 80, 20)]; self.username.placeholder = @"Enter your username"; self.username.backgroundColor = [UIColor whiteColor]; self.username.borderStyle = UITextBorderStyleRoundedRect; if (self.username.placeholder != nil) { self.username.clearsOnBeginEditing = NO; } self.username.delegate = self; [self.username resignFirstResponder]; [self.view addSubview:self.username]; } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } - (BOOL)textFieldShouldBeginEditing:(UITextField *)textField { return YES; } - (BOOL)textFieldShouldReturn:(UITextField *)textField { [textField resignFirstResponder]; return YES; } @end 

Sé que otros han respondido, pero encontré el otro artículo que cubría también sin evento de background: tableview o scrollview.

http://samwize.com/2014/03/27/dismiss-keyboard-when-tap-outside-a-uitextfield-slash-uitextview/

Como las tags solo dicen iOS, publicaré la respuesta para Swift 1.2 e iOS 8.4, agréguelas en la class swift del controller de vista:

 // MARK: - Close keyboard when touching somewhere else override func touchesBegan(touches: Set<NSObject>, withEvent event: UIEvent) { self.view.endEditing(true) } // MARK: - Close keyboard when return pressed func textFieldShouldReturn(textField: UITextField!) -> Bool { textField.resignFirstResponder() return true } // MARK: - 

Además, no olvide agregar UITextFieldDelegate en la statement de class y configure sus campos de text delegarse en uno mismo (la vista).

Agregar delegado: UITextFieldDelegate

 @interface ViewController : UIViewController <UITextFieldDelegate> 

y luego agrega este método de delegado

// Esto debería funcionar perfectamente

 - (BOOL)textFieldShouldReturn:(UITextField *)textField { [textField resignFirstResponder]; return YES; } 
 - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { [self.view.subviews enumerateObjectsUsingBlock:^(UIView* obj, NSUInteger idx, BOOL *stop) { if ([obj isKindOfClass:[UITextField class]]) { [obj resignFirstResponder]; } }]; } 

cuando usa más de un campo de text en la pantalla Con este método no necesita mencionar textfield cada vez como

 [textField1 resignFirstResponder]; [textField2 resignFirstResponder]; 

Swift 2:

¡Esto es lo que se hizo para hacer todo!

cierra el keyboard con el button Done o Touch outSide , Next para ir a la siguiente input.

Primero, cambie la key de Return Key TextFiled a Next en StoryBoard.

 override func viewDidLoad() { txtBillIdentifier.delegate = self txtBillIdentifier.tag = 1 txtPayIdentifier.delegate = self txtPayIdentifier.tag = 2 let tap = UITapGestureRecognizer(target: self, action: "onTouchGesture") self.view.addGestureRecognizer(tap) } func textFieldShouldReturn(textField: UITextField) -> Bool { if(textField.returnKeyType == UIReturnKeyType.Default) { if let next = textField.superview?.viewWithTag(textField.tag+1) as? UITextField { next.becomeFirstResponder() return false } } textField.resignFirstResponder() return false } func onTouchGesture(){ self.view.endEditing(true) } 

Si no conoce el controller de vista actual o la vista de text, puede usar la Cadena de respuesta:

 UIApplication.shanetworking.sendAction(#selector(UIView.endEditing(_:)), to:nil, from:nil, for:nil)