UITableView 通知 UITableViewCell 重新加载

Posted

技术标签:

【中文标题】UITableView 通知 UITableViewCell 重新加载【英文标题】:UITableView inform UITableViewCell about reload 【发布时间】:2012-12-21 10:25:37 【问题描述】:

以下是情况的简短摘要:

我有一个带有多个单元格的 TableViewController。 在其中一个单元格中,我有一个 UITextField。此单元格属于自定义 UITableViewCell 类。该类实现了 UITextFieldDelegate 协议和方法textFieldDidEndEditing:textFieldDidEndEditing: 方法中,我将TextField 的值存储到CoreData 中。

这一切都很好。

我的问题与重新加载 TableView 相关:

在用户执行某些操作后,我通过调用 [self.tableView reloadData] 重新加载 UITableView 的数据 如果我调用这个方法时,上面提到的TextField是第一响应者,那么textFieldDidEndEditing:方法就会被调用,导致我的CoreData相关代码执行。

当重新加载 TableView 时,我根本不希望自定义 TabelViewCell 执行任何操作。 有没有办法, TableViewCell 可以知道 TableView 正在重新加载?所以我可以在textFieldDidEndEditing: 方法中检查这个?

与此同时,我已经通过以下方式解决了它:

当这个 TableViewCell 被创建时,我让 ViewController 存储对它的引用。 在调用 [self.tableView reloadData] 之前,我首先通过设置自定义属性 _cell.tableWillReload = YES 来通知 Cell 我将在textFieldDidEndEditing: 方法中检查此属性。

我在想也许有一种不同的、更默认的方式,让 TableViewCells 知道它们周围的TableView 正在重新加载?

【问题讨论】:

【参考方案1】:

试试这个:-

[yourTextFieldOfCell resignFirstResponder];

在致电[self.tableView reloadData];之前

【讨论】:

感谢您的评论。调用 resignFirstResponder 会导致调用 textFieldDidEndEditing。结果还是一样。我不想执行textFieldDidEndEditing 中的代码。

以上是关于UITableView 通知 UITableViewCell 重新加载的主要内容,如果未能解决你的问题,请参考以下文章

UITableView 布局在滚动之前不会刷新

UITableView 列表选择器颜色 [重复]

从 UITableView 调用 UIPopoverController - objective-c

UITableView中的UILabel

UINavigationController 包含一个 UITableView,然后是一个包含更多 UITableView 的 UITabBarController

UICollectionViewCell 内带有 UITableView 的自定义单元格