在文本字段外面隐藏键盘

我试图在屏幕上的任何其他地方触摸后隐藏键盘。 我正在使用的代码基于这里的答案 。

IBOutlet UITextView *myTextView; 

方法:

 - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { UITouch *touch = [[event allTouches] anyObject]; if ([myTextView isFirstResponder] && [touch view] != myTextView) { [myTextView resignFirstResponder]; } [super touchesBegan:touches withEvent:event]; } 

我不明白的是我应该如何将我的UITextField链接到touchesBegan方法。 我需要使用哪个发送的事件? 此外,该方法不应该是IBAction,因为现在我无法将我的UITextField连接到它。

我也尝试了这个代码,但是那个破坏了我的导航按钮(即使是评论中提到的解决方案)

目标C:

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

迅速:

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

这是我找到的最好的方式,而且非常简单。

我应该如何将我的UITextField链接到touchesBegan方法。 我需要使用哪个发送的事件? 此外,该方法不应该是IBAction,因为现在我无法将我的UITextField连接到它。

因为你没有。 您必须在文本字段为子视图的视图上覆盖此方法。

我所做的是将整个UIView类更改为UIControl。 在此处输入图像描述

这为您提供了一个touchDown事件,您可以链接到resignFirstResponder的方法。 在此处输入图像描述
UIControl仍然为您提供UIView的所有function。

 -(IBAction)backgroundTap:(id)sender { [text1 resignFirstResponder]; [text2 resignFirstResponder]; [textLogin resignFirstResponder]; [textPassword resignFirstResponder]; } // Resign all responders 
 - (void)viewDidLoad { //for keybord hide when touch outside: UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(hidekeybord)]; [self.view addGestureRecognizer:tap]; [super viewDidLoad]; // Do any additional setup after loading the view from its nib. } -(void)hidekeybord { [_yourtextfield.txt resignFirstResponder]; } 
 In .h @property (nonatomic, assign) id currentResponder; In .h //in viewDidLoad: UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(resignOnTap:)]; [singleTap setNumberOfTapsRequired:1]; [singleTap setNumberOfTouchesRequired:1]; [self.view addGestureRecognizer:singleTap]; //Implement the below delegate method: - (void)textFieldDidBeginEditing:(UITextField *)textField { self.currentResponder = textField; } //Implement resignOnTap: - (void)resignOnTap:(id)iSender { [self.currentResponder resignFirstResponder]; } 

尝试快速而肮脏的方式:

按一个按钮并将其链接到一个动作方法(让我们称之为背景)。 拉伸按钮使其覆盖整个视图。 调整视图的图层,以便只有用户通过触摸进行交互的内容才会位于按钮的顶部。 将按钮类型更改为自定义,这使按钮不可见。 在方法Background中关闭firstResponder。