【问题标题】:How do I resignFirstResponder when I click outside of a UITextField onto a UITableView当我在 UITextField 外部单击 UITableView 时如何 resignFirstResponder
【发布时间】:2012-03-19 04:16:25
【问题描述】:

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

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

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

【问题讨论】:

    标签: iphone uitableview keyboard uitextfield first-responder


    【解决方案1】:

    2 个选项:

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

    就我个人而言,我通常在表格滚动时执行此操作,因为我不喜欢单击即可关闭键盘。

    【讨论】:

    • 感谢 UITapGestureRecognizer 完全符合我的要求。我很珍惜时间。我确信卷轴也能正常工作,在这种情况下我只需要点击,但会将卷轴保留在我的库存中以备后用。
    【解决方案2】:
       - (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];
       }
     }
    

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

    【讨论】:

    • 我最终使用了滚动,因为当我在 tableview 上放置一个 tapgesture 时,它​​会导致单元格不再读取点击,因此单元格不会提交单元格,因为点击手势正在吞噬事件.不过谢谢你,我可能会在以后的另一种情况下需要这段代码。
    【解决方案3】:

    添加轻击手势识别器是一个有趣的解决方案,但还有另一种选择,您无需编写任何代码!

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

    【讨论】:

      【解决方案4】:
      @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];
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-10-24
        • 2010-10-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多