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

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

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

我的UITableDataSource 类也充当我的UITableViewDelegate

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

最好的方法是什么?

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

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

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

【问题讨论】:

    标签: ios objective-c uitableview uiviewcontroller


    【解决方案1】:

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

    【讨论】:

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