在UITableViewCells中编辑UITextView时重新加载表视图

时间:2016-10-13 06:10:46

标签: ios uitableview uitextview

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

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

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

2 个答案:

答案 0 :(得分:0)

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

reloadRowsAtIndexPaths

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

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

这个逻辑可能不完美,你可能需要一些调整。但它会完成工作

答案 1 :(得分:0)

明确将文本字段设为firstResponder

if buttonsDisplayed == NO {
reload cell
}
if textFieldIsFirstResponder == NO {
[textField becomeFirstResponder];
}
相关问题