2 个回答

Jensen2k
你需要添加一个UITapGestureRecogniser并且指定到视图,然后在选择器调用文本框拒绝第一个响应。
代码:
viewDidLoad的:

UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] 
                                       initWithTarget:self
                                       action:@selector(dismissKeyboard)];

[self.view addGestureRecognizer:tap];

dismissKeyboard的:

-(void)dismissKeyboard {
       [aTextField resignFirstResponder];
}

Joey Tiell
我看到有些人使用UITapGestureRecognizer方法时遇到一些问题。在保留现存按钮敲击行为的完整性的同时,实现这个功能的最简单的方式是在Jensen2k的回答中添加一行代码:

[tap setCancelsTouchesInView:NO];

这能在不使用Dmitry Sitnikov的函数的情况下雨荨现存按钮继续发挥作用。
阅读一下这个资源 (搜索CancelsTouchesInView):
UIGestureRecognizer Class Reference
我不去确定它怎样协同滚动条工作,因为我看到了一些问题,其他人也有可能遇到类似的情况。


Prasad
看看这个,或许这是最简单的方式:

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
      [self.view endEditing:YES];// this will do the trick
}

Dmitry Sitnikov
给UIView一个UIControl(在界面生成器里)的实例或许会更好。然后连接"Touch Up Inside"事件到dismissKeyboard函数。这个IBAction看起来是这个样子的:

- (IBAction)dismissKeyboard:(id)sender {
    [aTextBox resignFirstResponder];
}

Mr H
看看这个怎么样,我知道这是个老方法,但是或许管用:

-(void)touchesEnded: (NSSet *) touches withEvent: (UIEvent *) event {   
    NSArray *subviews = [self.view subviews];
    for (id objects in subviews) {
        if ([objects isKindOfClass:[UITextField class]]) {
            UITextField *theTextField = objects;
            if ([objects isFirstResponder]) {
                [theTextField resignFirstResponder];
            }
        } 
    }
}

Enzo Tran
我认为最简单,也是最好的方式是继承全局视图,使用hitTest:withEvent函数来监听任何触摸。键盘上的触摸是没有注册的,所以只有在你触摸/滚动/强击...别的地方的时候才调用hitTest:withEvent,然后调用[self endEditing:YES]。
这比用touchesBegan更好,因为当你点击视图顶部的按钮时touchesBegan是不会被调用的。这也比UITapGestureRecognizer方法好,因为UITapGestureRecognizer不能识别滚动手势等。这还比暗化界面好,因为在动态复杂的用户界面上,不是在任何地方都可以暗化界面的。除此之外,它还不能阻止其他操作,你不需要在外部轻按两次来选择一个按钮(比如UIPopover)。
另外,这比调用[textField resignFirstResponder]好,因为屏幕上可能有很多文本框,这个对所有都有效。

如果界面不复杂你可以在View中添加一个Button,设置成Custom类型,再将它置于最底层,并为这个Button添加事件。在事件中讲键盘隐藏。如果界面很复杂,可供点击的区域并不多,可以考虑在键盘上方放置一个隐藏按钮。其次,实现TextField的DidEndOnExit事件,在该事件中隐藏键盘。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题