当我在UITextField外部单击UITableView时,如何resignFirstResponder

时间:2012-02-29 16:48:14

标签: iphone uitableview keyboard uitextfield first-responder

我无法在我的iPhone应用程序中使用键盘离开,因为UIView即使在制作控制器时也是不可触摸的,因为我有一个UITableView占用剩下的可用的屏幕。

我很想知道如何通过点击firstResponder来退出键盘UITableView?有没有办法监视UITableView上的触摸事件,即使它不是要选择可点击的单元格。

基本上,我知道如果单元格触发事件,如何重新键盘键盘,但如果我点击UITableView的不可点击部分,我仍然希望键盘消失。

4 个答案:

答案 0 :(得分:6)

2个选项:

  • 在viewController中,响应表的滚动回调并重新启动响应者
-(void)scrollViewDidScroll:(UIScrollView *)scrollView
{
     [self.view endEditing:YES];
}
  • 您始终可以在表/视图中添加 UITapGestureRecognizer ,并从那里重新启动响应者

就我个人而言,我通常会在桌面滚动上进行,因为我不喜欢单击以关闭键盘。

答案 1 :(得分:3)

   - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
    {
    UITapGestureRecognizer *doubleTap = 
            [[UITapGestureRecognizer alloc]
             initWithTarget:self 
             action:@selector(tapDetected:)];
            doubleTap.numberOfTapsRequired = 1;
            [self.tableView addGestureRecognizer:doubleTap];
            [doubleTap release];

    }

 - (IBAction)tapDetected:(UIGestureRecognizer *)sender 
 {
    CGPoint p = [sender locationInView:self.tableView];

    NSIndexPath *indexPath = [self.tableView indexPathForRowAtPoint:p];

   if(indexPath == nil)
   {
     NSLog(@"empty");
   }
   else
   {
     [textField resignFirstResponder];
   }
 }

我认为这会有所帮助......试试吧..

答案 2 :(得分:3)

添加点击手势识别器是一个有趣的解决方案,但有一个替代方案,您不需要编写任何代码!

您可以在Interface Builder中将属性 keyboardDismissMode 设置为"在拖动时关闭"为您的表格视图。它是从UIScrollView继承的属性,每当您滚动表格视图时,键盘都会被解除。

答案 3 :(得分:0)

@property (weak, nonatomic) UITextField *activeTextField; // keeps track of whose keyboard is being displayed.

- (void)textFieldDidBeginEditing:(UITextField *)textField {
   self.activeTextField = textField;
}

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
   // if (indexPath equal to something then)
   [self.activeTextField resignFirstResponder];
}