当用户触摸uiview时隐藏键盘
我有一个包含多个文本框的UIView。现在我已经使用委托将响应者从文本字段更改为另一个字段。在这种情况下,当用户进入上一个文本字段时,我的键盘会消失。当用户触摸uiview时隐藏键盘
但现在我想隐藏我的键盘,当用户触摸UIView(触摸屏幕上的任何地方除了文本框)。有人可以帮我弄这个吗。
感谢
使用resignFirstResponder中的touchesBegan,像这样:
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
UITouch * touch = [touches anyObject];
if(touch.phase == UITouchPhaseBegan) {
[self.myTextField resignFirstResponder];
}
}
您可能需要,如果你不知道在哪里焦点当前位于调用此对多个文本字段;我没有测试过这种情况。
此外,在界面生成器,你将需要启用该视图的“已启用用户交互”复选框,或编程使用:
myView.userInteractionEnabled = YES;
据Beginning iPhone Development,你画一个圆矩形按钮,这样它涵盖了你的整个UI;完整的屏幕。然后转到布局菜单并单击发送到后面。然后在检查员中,将按钮的类型从round rect更改为自定义。现在,向这个按钮添加一个触摸内部事件并将其附加到处理它的方法。在这个方法的身体,请确保您有语句:
[myTextFieldOne resignFirstResponder];
[myTextFieldTwo resignFirstResponder];
基本上发送resignFirstResponder
消息发送到每个文本字段,或能产生一个键盘的任何领域。
我其实是iPhone SDK的新手。我不知道这是否是最好的方法,但它是有效的,这是我从上述书中学到的。希望能帮助到你。
感谢Blaenk,我正在努力解决如何做到这一点,并没有意识到我可以把一个按钮放在后台,很好的把戏!这里是我的贡献(新来这个网站,并可可触及,因此它可能不是最强大的代码以往,但它的工作迄今...):
我打电话从touchUpInside
事件这个方法对我的UIButton:
-(void)closeKeyboard:(id)sender {
UIView *theFirstResponder = [self findFirstResponder];
if (theFirstResponder) {
[theFirstResponder resignFirstResponder];
}
}
当该环路发现firstResponder:
- (UIView *)findFirstResponder {
UIView *firstResponderView = nil;
for (UIView *view in [self entryFields]) {
if ([view isFirstResponder]) {
firstResponderView = view;
break;
}
}
return firstResponderView;
}
它是取决于每个在具有分配给他们的(再次标签视图的UITextField
控件,可以做THA在Interface Builder中)。
无论如何,我的两分钱,尽管我最好还给回来!
我用
-(void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
UITouch *touch = [touches anyObject];
if(touch.phase==UITouchPhaseBegan){
//find first response view
for (UIView *view in [self.view subviews]) {
if ([view isFirstResponder]) {
[view resignFirstResponder];
break;
}
}
}
}
SO我苦苦思索这一点,我想通了..
你不需要其他按钮或任何东西。
所有你需要做的就是选择“文件所有者”,在检查器中从其textField出口(或任何你命名它)拖到你的实际文本框(通过你命名的任何东西)这将是除了任何输入你已经连线了。
和ofcourse除了控制出口通过backgroundtouched ...的第一件事,我们都试图
改变类的UIView类UIControl从的识别标签(的UIView通过检查改为UIControl),以文件的所有者督察。 补充一点:
- (IBAction)tabBackground:(id) sender;
您.h文件中。
添加到您的.m文件:
- (IBAction)tabBackgroup:(id) sender {
[nameField resignFirstRespnder];
[numberField resignFirstResponder];
}
您tabBackground从检查连接,操作中收到部分UIView的(这是一个UIControl),你是好去。
只需在视图控制器中调用此选项即可隐藏键盘。
[self.view endEditing:NO];
一个超级简单的方法做,这是什么工作PCheese说。
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
UITouch * touch = [touches anyObject];
if(touch.phase == UITouchPhaseBegan) {
[self.view endEditing:YES];
}
}
我以前用过[self.view endEditing:YES];
一个按钮事件,但与以前的答案结合它的工作原理治疗。更容易,你不必做任何事情 - 只要把它放在你的.m文件中。此外,这适用于所有(至少,据我所见)文本字段(适用于UITextField和UITextView)。
我知道OP可能不会仍然需要这个,但我只是想分享给他人与同样的问题。
解决这个问题是使用下面的方法的最适当的方法:
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
UITouch *touch = [touches anyObject];
if(![touch.view isMemberOfClass:[UITextField class]]) {
[touch.view endEditing:YES];
}
}
注:这不会对UIScrollView的情况下工作。
对我来说
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
[self.view endEditing:NO];
}
只需要到self.view工作有一个的UITextField
http://objdev.com/2013/11/Dismissing-iOS-Keyboard-Self-View-EndEditing
为SWIFT 4.0
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
let touch = touches.first
if touch?.phase == UITouchPhase.began {
touch?.view?.endEditing(true)
}
}
但是,在调用此resignFirstResponder 。如何知道用户触摸了UIView? – nbojja 2009-06-08 06:09:31
我已编辑帖子,在touchesBegan中包含一个示例。 – PCheese 2009-06-08 06:37:01
嘿..感谢您的帮助..它与UIView很好地合作。但我有另一个场景,我在UITableView中有文本框。在这种情况下,你的代码不工作。我对iPhone开发非常陌生,所以请...... – nbojja 2009-06-08 07:13:30