通常当您触摸文本输入区域时,键盘会弹出,当您触摸屏幕的空白区域时,键盘会消失。如何实现这一目标?
就像我们在iphone safari上所经历的那样...
谢谢
答案 0 :(得分:115)
更新方式(推荐):
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
[self.view endEditing:YES];
}
这将结束所有子视图的编辑并重新签署第一个响应者。
其他方式(枚举所有文本视图):
以下是一步一步:
将IBAction添加到视图控制器,例如 - (IBAction)backgroundTouch:(id)sender
在backgroundTouch操作中,您需要将resignFirstResponder消息发送到视图中的所有文本框。这是不幸的,但是必要的,因为目前无法检索当前具有FirstResponder状态的对象。看起来应该是这样的:
- (IBAction)backgroundTouch:(id)sender {
[someTextBox resignFirstResponder];
[anotherTextBox resignFirstResponder];
}
向视图添加一个按钮控件,将其大小覆盖整个可见区域(状态栏或任何选项卡或导航控制器除外)。选择按钮,然后转到布局菜单并选择发送至返回。同时将按钮的类型设置为自定义,如果您没有专门为其提供任何绘图代码,则该类型是不可见的。
将Button的Touch Up Inside事件连接到backgroundTouch:动作并试用。
答案 1 :(得分:73)
使用这个简单的解决方案
对于Swift 4:
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
self.view.endEditing(true)
}
对于Swift 2:
override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
self.view.endEditing(true)
}
对于目标C:
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
[self.view endEditing:YES];
}
使用UITextField,UITextView和所有子视图。
答案 2 :(得分:16)
忘了在背景中放一个按钮那里有简单的解决方案
(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
[self.textfieldName resignFirstResponder];
}
答案 3 :(得分:4)
有一个关于这个问题的教程(关于没有DONE键的数字键盘)here
答案 4 :(得分:4)
对于&gt; iOS 4.0还有另一种解决方案(也许更好) 使用此代码,可以在视图中的任意位置单击以隐藏键盘。
// single tap to resign keyboard
UITapGestureRecognizer *singleTapRecognizer = [[UITapGestureRecognizer alloc] initWithBlock:^(UIGestureRecognizer *rec){
[input_text resignFirstResponder];
}];
self.singleTapRecognizer.numberOfTapsRequired = 1;
self.singleTapRecognizer.cancelsTouchesInView = NO;
[self.view addGestureRecognizer:singleTapRecognizer];
答案 5 :(得分:2)
将resignFirstResponder
发送给控件。
答案 6 :(得分:1)
你也可以这样做
通过触摸视图中的背景隐藏keyBoard
- (void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
[[self view] endEditing:YES];
}
答案 7 :(得分:1)
以下代码适用于xamarin iOS项目:
public override void TouchesBegan (NSSet touches, UIEvent evt){
View.EndEditing (true);
}
答案 8 :(得分:0)
我也有这个问题,这很烦人。但我想出了如何在意外中摆脱键盘。假设您正在给约翰发短信,并且在查看对话时会出现键盘,从而减少您可以看到的屏幕。然后单击左侧的消息,然后选择另一个您有短信记录的人,然后再次点击左上角的消息。然后回去选择约翰。不,你回到约翰的谈话,键盘消失了。接缝很多,但很快。你认为他们只是在键盘上放了一个隐藏按钮lol希望有帮助,或者说足够清楚。
答案 9 :(得分:0)
我无法使用'initWithBlock:'选择器编译Val的答案。
此代码适用于我。将此添加到定义视图的方法中 - 请注意我的视图已合成,并且我想要响应单击的子视图是“chatView”。使用键盘的输入字段视图名为“chatInput”。
// single tap to resign (hide) the keyboard
UITapGestureRecognizer *singleTapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTapFrom:)];
singleTapRecognizer.numberOfTouchesRequired = 1;
singleTapRecognizer.cancelsTouchesInView = NO;
[chatContent addGestureRecognizer:singleTapRecognizer];
然后添加点击处理方法。
/**
* Handles a recognized single tap gesture.
*/
- (void) handleTapFrom: (UITapGestureRecognizer *) recognizer {
// hide the keyboard
NSLog(@"hiding the keyboard");
[chatInput resignFirstResponder];
}
答案 10 :(得分:0)
如果你正在使用swift和iOS 8/9,这个解决方案应该可以正常工作:
override func touchesBegan(touches: Set<NSObject>, withEvent event: UIEvent) {
self.view.endEditing(true)
}