【问题标题】:Reload table view on editing UITextView inside UITableViewCells在 UITableViewCells 内编辑 UITextView 时重新加载表格视图
【发布时间】:2016-10-13 06:10:45
【问题描述】:

我有一些自定义的 UITableViewCells,其中包含一个 UITextView 和一组按钮。只有当用户尝试编辑相应单元格中的文本视图时,单元格中的按钮才应该可见。 因此,如果用户尝试编辑 cell1 中的 textview,则按钮集应该在 cell1 中的 textview 下方可见,并且 cell1 的高度也应该增加。现在,如果用户尝试编辑 cell2 中的 textview,那么按钮集应该在 cell2 中的 textview 下方可见,并且 cell2 的高度也应该增加,而 cell1 中的按钮应该被移除并且单元格大小需要相应地计算。

为此,我尝试从 textViewDidBeginEditing: 重新加载表格视图单元格。这是正确重新加载单元格并在所需单元格中正确显示/隐藏按钮,但不允许正确编辑文本视图。当用户尝试使用 textview 进行编辑时,tableview reload 方法会不断调用,并且不允许键盘代表编辑。

首先处理从 textViewDidBeginEditing: 重新加载是否正确?有没有更好的方法来做到这一点?请帮忙。

【问题讨论】:

  • 放一些你在项目中使用的代码

标签: ios uitableview uitextview


【解决方案1】:

首先我建议不要每次都重新加载整个 TableView。而是使用

reloadRowsAtIndexPaths

仅加载要修改的单元格的方法。

接下来,要解决有关 textView 的问题,您可以这样做,声明一个 bool 类型的类属性,并将其设置为 false。第一次重新加载单元格时,请将其设置为 true。现在在 textViewDidBegin 编辑方法中,检查这个布尔值。如果设置为 true,则表示您已经加载了单元格并且不需要再次加载它,因此在这种情况下不要调用 reloadRows 方法。否则,如果它为假,则重新加载行并将此布尔值设置为真。 现在在 textViewDidEndEditing 委托方法中,再次将此 bool 设置为 false,以便当用户点击其他行中的另一个 textView 时,它会正确重新加载。

此逻辑可能并不完美,您可能需要进行一些调整。但它会完成工作

【讨论】:

    【解决方案2】:

    明确地将文本字段设为 firstResponder

    if buttonsDisplayed == NO {
    reload cell
    }
    if textFieldIsFirstResponder == NO {
    [textField becomeFirstResponder];
    }
    

    【讨论】:

      猜你喜欢
      • 2012-04-30
      • 2023-03-13
      • 1970-01-01
      • 1970-01-01
      • 2018-04-12
      • 2017-05-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多