She*_*lam 42 iphone cocoa-touch objective-c uitextfield ios
我希望能够在用户点击键盘外的任何位置时关闭iPhone键盘.我该怎么做呢?我知道我需要解雇响应者,但需要知道当用户从键盘空间中弹出时如何实现它.
vis*_*kh7 82
您需要添加一个UITapGestureRecogniser
并将其分配给视图,然后在其选择器的文本字段上调用resign first responder.
代码:
在 viewDidLoad
UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self
action:@selector(dismissKeyboard)];
[self.view addGestureRecognizer:tap];
Run Code Online (Sandbox Code Playgroud)
在 dismissKeyboard:
-(void)dismissKeyboard {
[aTextField resignFirstResponder];
}
Run Code Online (Sandbox Code Playgroud)
(其中aTextField是负责键盘的文本字段)
方案2
如果您无法承担添加gestureRecognizer的费用,那么您可以试试这个
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
UITouch * touch = [touches anyObject];
if(touch.phase == UITouchPhaseBegan) {
[aTextField resignFirstResponder];
}
}
Run Code Online (Sandbox Code Playgroud)
小智 42
我用过的最简单的解决方案是:
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
[self.view endEditing:YES];
}
Run Code Online (Sandbox Code Playgroud)
endEditing命令可用于包含文本字段作为子视图的任何视图.此方法的另一个优点是您不需要知道哪个文本字段触发了键盘.因此,即使您有多个文本字段,只需将此行添加到superview即可.
基于Apple文档,我认为这种方法专门用于解决这个问题.
Mat*_*ees 16
添加tapGesture识别器但请确保cancelsTouchesInView = NO
UITapGestureRecognizer* tapGesture = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(closeTextInput)];
tapGesture.cancelsTouchesInView = NO;
[self.view addGestureRecognizer:tapGesture];
[tapGesture release];
Run Code Online (Sandbox Code Playgroud)