通常当您触摸文本输入区域时,键盘会弹出;当您触摸屏幕的空白区域时,键盘会消失。如何实现这一效果?
就像我们在 iPhone Safari 上所体验到的那样...
谢谢
通常当您触摸文本输入区域时,键盘会弹出;当您触摸屏幕的空白区域时,键盘会消失。如何实现这一效果?
就像我们在 iPhone Safari 上所体验到的那样...
谢谢
更新的方式(推荐):
- (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];
}
在视图中添加一个按钮控件,将其大小设置为覆盖整个可见区域(除了状态栏、任何选项卡或导航控制器)。选择按钮,然后转到布局菜单并选择“发送到背面”。还要将按钮的类型设置为custom,如果您没有提供任何绘图代码,它将是不可见的。
将按钮的“Touch Up Inside”事件连接到“backgroundTouch:”操作上,并尝试一下。
可以使用这个简单的解决方案
对于 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)
}
针对 Objective-C:
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
[self.view endEditing:YES];
}
适用于UITextField、UITextView和所有子视图。
不用在背景中放置按钮,这里有一个简单的解决方案
(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
[self.textfieldName resignFirstResponder];
}
对于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];
resignFirstResponder
发送给控件。- (void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
[[self view] endEditing:YES];
}
public override void TouchesBegan (NSSet touches, UIEvent evt){
View.EndEditing (true);
}
如果你正在使用Swift和iOS 8/9,这个解决方案应该可以很好地工作:
override func touchesBegan(touches: Set<NSObject>, withEvent event: UIEvent) {
self.view.endEditing(true)
}
我无法使用“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];
}
touchesBegan:withEvent:
不应该调用[super touchesBegan:touches withEvent:event]
吗? - Gonzo