【问题标题】:Why height related methods are placed in UITableViewDelegate, not in UITableViewDataSource为什么高度相关的方法放在UITableViewDelegate,而不是UITableViewDataSource
【发布时间】:2018-02-06 17:10:44
【问题描述】:

我在一个测验中发现一个问题是“哪个 UIKit 协议包含方法 –tableView:heightForRowAtIndexPath:?

在没有任何负载的情况下,我想到的协议是 UITableViewDataSource。但是当我查看苹果开发者文档时,我发现我错了。 UITableViewDelegate 是包含该方法的协议。

在此之前我的理解是这些高度方法是数据源协议的一部分。

将它们放在 UITableViewDelegate 而不是 UITableViewDataSource 中是否有任何具体原因?

为什么下面的函数放在UITableViewDelegate

  • heightForRowAt indexPath
  • heightForHeaderInSection
  • heightForFooterInSection

以及为什么将下面的函数放在UITableViewDataSource

  • numberOfSectionsInTableView
  • numberOfRowsInSection

以前我认为这些是相似类型的函数,所以这些方法必须放在同一个协议中。

请告诉我。

提前致谢

【问题讨论】:

标签: ios uitableview


【解决方案1】:

UITableViewUI 前景由UITableViewDelgate 方法和data 提供(我们不是在谈论cell 内部要使用的数据,只是关于UI 的信息构造UI 所需的(sectionrow 等)重复次数由UITableViewDataSource 方法提供。

【讨论】:

    【解决方案2】:

    数据源提供数据,委托提供行为。

    MVC中,数据源在模型层,委托在控制层。

    实际上,再想一想,数据源通常是较低的控制器,更靠近模型。我不认为我曾经使用过模型对象作为我的数据源。

    【讨论】:

      【解决方案3】:

      UITableViewDelegate 表示您为有关表格布局和用户在表格视图上执行的操作的请求提供答案。

      UITableViewDatasource 表示您为表格的部分和行提供数据,并对更改表格数据的消息采取行动。

      更多详情,请查看DataSourceDelegate

      【讨论】:

        【解决方案4】:

        numberOfSectionsInTableViewnumberOfRowsInSection 是回答有关要显示的数据 问题的函数,这就是为什么它们会出现在DataSource 协议 中。

        heightFor... 函数不回答任何有关基础数据的问题,而只回答数据的显示方式。这就是为什么它们是委托协议的一部分。

        这对你有意义吗?

        【讨论】:

          猜你喜欢
          • 2021-09-18
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多