通常触摸文本输入区域时,键盘会弹出,而当您触摸屏幕的空白区域时,键盘会消失。如何做到这一点?
就像我们在 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];
}
向视图添加一个按钮控件,调整其大小以覆盖整个可见区域(状态栏或任何选项卡或导航控制器除外)。选择 按钮,然后转到布局菜单并选择发送到后面。还将按钮的类型设置为自定义,如果您没有专门为其提供任何绘图代码,则它是不可见的。
将 Button 的 Touch Up Inside 事件连接到 backgroundTouch: 动作并尝试一下。
使用这个简单的解决方案
对于斯威夫特 4:
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
self.view.endEditing(true)
}
对于斯威夫特 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];
}
对于 > 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];
有一个关于这个问题的教程(也关于没有 DONE 键的数字键盘)在这里
发送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];
}
我无法使用 '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];
}
我也遇到了这个问题,很烦。但我想出了如何在意外中摆脱键盘。假设您正在给 John 发短信,并且有一个键盘妨碍您查看对话,因此减少了您可以看到的屏幕。然后点击左上角的消息,然后选择另一个你有发短信记录的人,然后再次点击左上角的消息。然后返回并选择 John。不,你又回到了与约翰的对话中,键盘不见了。接缝很多,但速度很快。你会认为他们只是在键盘上放了一个隐藏按钮 lol 希望有帮助,或者足够清楚。
如果您使用 swift 和 iOS 8/9,此解决方案应该可以正常工作:
override func touchesBegan(touches: Set<NSObject>, withEvent event: UIEvent) {
self.view.endEditing(true)
}