【发布时间】:2010-10-22 17:14:39
【问题描述】:
通常当你触摸文本输入区域时,键盘会弹出,当你触摸屏幕的空白区域时,键盘会消失。如何做到这一点?
就像我们在 iphone safari 上所经历的......
谢谢
【问题讨论】:
标签: iphone iphone-softkeyboard
通常当你触摸文本输入区域时,键盘会弹出,当你触摸屏幕的空白区域时,键盘会消失。如何做到这一点?
就像我们在 iphone safari 上所经历的......
谢谢
【问题讨论】:
标签: iphone iphone-softkeyboard
更新方式(推荐):
- (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];
}
【讨论】:
here上有一个关于这个问题的教程(也关于没有 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];
【讨论】:
向控件发送resignFirstResponder。
【讨论】:
以下代码适用于 xamarin iOS 项目:
public override void TouchesBegan (NSSet touches, UIEvent evt){
View.EndEditing (true);
}
【讨论】:
你也可以这样做
通过在视图中触摸背景来隐藏键盘
- (void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
[[self view] endEditing:YES];
}
【讨论】:
我也遇到了这个问题,很烦。但我想出了如何在意外中摆脱键盘。假设您正在给 John 发短信,并且有一个键盘妨碍您查看对话,因此减少了您可以看到的屏幕。然后点击左上角的消息,然后选择另一个你有发短信记录的人,然后再次点击左上角的消息。然后返回并选择 John。不,你又回到了与约翰的对话中,键盘不见了。接缝很多,但速度很快。你会认为他们只是在键盘上放了一个隐藏按钮哈哈希望有帮助,或者足够清楚。
【讨论】:
我无法使用 '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];
}
【讨论】:
如果您使用 swift 和 iOS 8/9,此解决方案应该可以正常工作:
override func touchesBegan(touches: Set<NSObject>, withEvent event: UIEvent) {
self.view.endEditing(true)
}
【讨论】: