UIViewController 和 UITableViewDelegate 之间的通信

Posted

技术标签:

【中文标题】UIViewController 和 UITableViewDelegate 之间的通信【英文标题】:Communicating between UIViewController and UITableViewDelegate 【发布时间】:2018-02-12 16:24:03 【问题描述】:

我有一个UIViewController,其中包含一个UITableView(以及其他视图)。

UITableView 可以从两个UITableDataSource 之一获取其单元格,具体取决于某些条件。

我的UITableDataSource 类也充当我的UITableViewDelegate

当一个单元格被选中 (tableView:didSelectRowAtIndexPath) 时,我可能想要对 UIViewController 执行操作,例如 performSegue 或显示警报。

最好的方法是什么?

    在每个数据源/委托类中添加对UIViewController 的弱引用 为每个数据源/委托类创建一个委托,它调用我的UIViewController 中的函数 你的建议在这里!

我考虑将我的UIViewController 设为UITableViewDelegate,但由于单元格因来源而异,我认为它会变得混乱。

注意:我说的是“最好的方法”,但实际上我只是对替代方法感兴趣

【问题讨论】:

【参考方案1】:

最常见的方法是继承 UITableViewController 并在那里实现UITableViewDelegateUITableDataSource。您可以根据控制器类中的任何状态返回 cellForRowAtIndexPath 中所需的任何单元格。

【讨论】:

我已经将 UIViewController 子类化了,通常这也是我的代表。但在这种情况下,由于我必须在两个完全不同的表视图之间进行选择,我希望有两个单独的数据源。 例如,我使用分段控件在单个表视图中在 3 个不同的数据集之间切换。 UITableViewController 子类引用分段控件和三个数据数组。然后,我覆盖“numberOfRowsInSection”、“cellForRowAtIndexPath”和任何其他数据源函数,以根据段控件的状态提供数据。当段控件切换到新段时,只需调用 tableView.reloadData 绘制新数据即可。

以上是关于UIViewController 和 UITableViewDelegate 之间的通信的主要内容,如果未能解决你的问题,请参考以下文章

在 xcode 4.2 中将 UITableViewController 转换为 UIViewController

将表格视图设置为编辑模式

如何立即设置CustomTableView(CoreData)

@synthesize IBOutlet 属性

Tableview单元格快速折叠和扩展值

从 UITableView 的子类访问 UIScrollViewDelegate