在文本字段外面隐藏键盘
我试图在屏幕上的任何其他地方触摸后隐藏键盘。 我正在使用的代码基于这里的答案 。
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。