通常,当您触摸文本输入区域时,键盘会弹出,而当您触摸屏幕的空白区域时,键盘会消失。如何做到这一点?
就像我们在iPhone Safari上体验到的一样...
谢谢
Answers:
更新方式(推荐):
- (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:操作,然后尝试一下。
touchesBegan:withEvent:
不应该打电话[super touchesBegan:touches withEvent:event]
吗?
使用这个简单的解决方案
对于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和所有子视图一起使用。
忘记在后台放置按钮的简单解决方案
(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
[self.textfieldName resignFirstResponder];
}
有一个关于这个问题(也涉及数字键盘没有DONE键)的教程在这里
对于> 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];
我无法使用“ 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];
}