【问题标题】:Easiest way to adjust UITableView for showing hiding the UIKeyboard调整 UITableView 以显示隐藏 UIKeyboard 的最简单方法
【发布时间】:2011-12-25 18:02:22
【问题描述】:

我有一个UITableView 和几个UITableViewCells。每个单元格包含一个UITextfield。点击 textFields 会显示键盘。不幸的是,键盘覆盖了 iPhone 屏幕下方的一些单元格。

在显示键盘时向上滚动 tableView 最简单的方法是什么?

我已经尝试过contentOffset。这适用于实际滚动 tableView。但是我无法确定哪个单元格是“活动的”(有一个当前是 firstResponder 的 textField)。我的应用同时支持纵向和横向,因此有时需要在设备旋转时滚动 tableView。

【问题讨论】:

  • 您不能使用方法 cellForRowAtIndexPath 来识别您需要哪些单元格以及您可以在文本字段之外对哪些单元格进行动画处理吗?

标签: ios uitableview uikeyboard


【解决方案1】:

跟踪哪个 textField 当前处于活动状态的一种简单方法是将其tag 属性设置为cellForRowAtIndexPath: 上的indexPath 行

另一种方法是使用这一行:

NSIndexPath *indexPath = [self.tableView indexPathForRowAtPoint:[textField convertPoint:textField.frame.origin toView:self.tableView]];

textFieldShouldBeginEditing: 上表示 textField 变为活动状态,或者在您的旋转回调上表示设备旋转时,然后使用 scrollToRowAtIndexPath:atScrollPosition:animated: 滚动 tableView

【讨论】:

    【解决方案2】:

    我正在编写一个有类似问题的应用程序。我处理跟踪第一响应者或活动 UITextField 的方式是使用回调。我使用 UIControlEvent UIControlEventEditingDidBegin 调用一个方法。

    我在哪里设置 UITextField:

    [self.nameUnitNumberField addTarget:self.textFieldDelegate action:@selector(handleEditingDidBegin:) forControlEvents:UIControlEventEditingDidBegin];
    

    然后在委托类中,我设置当前文本字段:

    - (void)handleEditingDidBegin:(id)sender
    {
        self.currentNameField = (UITextField *)sender;
    }
    

    这似乎运作良好。它还避免了使用标签。我听说它有潜在的问题,最好在不需要时避免它。

    一旦您拥有活动的 UITextField,您就可以使用 contentInset 和 scrollToRowAtIndex:如下所述:Get UITableView to scroll to the selected UITextField and Avoid Being Hidden by Keyboard

    或者只是在键盘在屏幕上时调整表格视图的大小。这将是最简单的方法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-09-05
      • 2022-07-26
      • 1970-01-01
      • 2016-07-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多