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 并在那里实现UITableViewDelegate
和UITableDataSource
。您可以根据控制器类中的任何状态返回 cellForRowAtIndexPath
中所需的任何单元格。
【讨论】:
我已经将 UIViewController 子类化了,通常这也是我的代表。但在这种情况下,由于我必须在两个完全不同的表视图之间进行选择,我希望有两个单独的数据源。 例如,我使用分段控件在单个表视图中在 3 个不同的数据集之间切换。 UITableViewController 子类引用分段控件和三个数据数组。然后,我覆盖“numberOfRowsInSection”、“cellForRowAtIndexPath”和任何其他数据源函数,以根据段控件的状态提供数据。当段控件切换到新段时,只需调用 tableView.reloadData 绘制新数据即可。以上是关于UIViewController 和 UITableViewDelegate 之间的通信的主要内容,如果未能解决你的问题,请参考以下文章
在 xcode 4.2 中将 UITableViewController 转换为 UIViewController