【问题标题】:Why is tableView:canMoveRowAtIndexPath: in the UITableViewDataSource protocol?为什么 tableView:canMoveRowAtIndexPath: 在 UITableViewDataSource 协议中?
【发布时间】:2023-03-21 20:54:02
【问题描述】:

为什么tableView:canMoveRowAtIndexPath:UITableViewDataSource 协议而不是UITableViewDelegate 协议?

类似的方法(例如tableView:canFocusRowAtIndexPath:)在Delegate 协议中。我不认为这是一个错误,那么任何人都可以解释为什么这种方法是数据源的一部分而不是委托?

还需要对哪些方法属于数据源协议以及哪些属于委托协议进行一般说明。

【问题讨论】:

标签: ios uitableview cocoa-touch model-view-controller delegates


【解决方案1】:

委托方法通常与表格视图的外观有关。

数据源方法一般与表格视图的内容有关。显示内容的顺序通常是固定的。假设表格视图显示了公交线路上的站点,或者一本书的章节标题。你不能让用户重新排序:这不是 内容本身支持的东西。

请注意,委托和数据源实际上都参与了行是否可以移动的决定。数据源获取您命名的方法,但同时询问委托tableView:targetIndexPathForMoveFromRowAtIndexPath:toProposedIndexPath:

【讨论】:

  • 如你所说,数据源方法与content有关,但tableView:canMoveRowAtIndexPath:与内容无关。这都是关于表格视图的外观。我还不相信。 (我同意在表格视图中移动行是内容和外观的问题,但我仍然相信tableView:canMoveRowAtIndexPath: 与外观有关,而不是内容。)
  • @Behdad 好吧,数据源必须能够处理数据的移动,所以我认为问它是否可以做到这一点是公平的 :)
  • @JoshCaswell 听起来可以接受。 tableView:canMoveRowAtIndexPath: 与数据对象有一点关系(决定数据是否可以移动),所以我认为这就是他们将其包含在 DataSource 协议中的原因。我赞成你的答案,但我会在接受之前等待其他答案。谢谢。
  • 请记住 rowcell 之间的区别,@Behdad。单元格是一个视图;该行实际上是模型层的一部分。
  • @JoshCaswell 好吧,这没有帮助!然后有人可能会问为什么tableView:cellForRowAtIndexPath: 在 DataSource 而不是 Delegate 中。
【解决方案2】:

UITableViewDatasource 协议documentation

UITableViewDataSource 协议被一个对象采用 为 UITableView 对象调解应用程序的数据模型。这 数据源为表视图对象提供了它的信息 需要构造和修改表格视图。

作为数据模型的代表,数据源提供 关于表视图外观的最少信息。表视图 对象的委托——采用 UITableViewDelegate 的对象 协议——提供该信息。

协议所需的方法提供要显示的单元格 通过 table-view 以及通知 UITableView 对象关于 节数和每个节中的行数。数据 源可以实现可选的方法来配置的各个方面 表视图以及插入、删除和重新排序行。

希望,这可以解决问题。

编辑: 用我自己的话(但重复文档):数据源声明的方法以某种方式直接或间接影响/反映数据模型,而方法 tableView:canFocusRowAtIndexPath: 不能说类似tableView:canMoveRowAtIndexPath: 因为它与数据无关。也就是说,数据源具有建设性特征,代表 - 信息丰富。

【讨论】:

  • 有什么理由拒绝投票?
  • -1:通常情况下,只引用文档绝不是一个好主意。至少用你自己的话+说一句话:操作甚至链接到文档;)
  • @Daij-Djan,我打算用我自己的话来说这一切,但发现文档中已经说得更好了。这就是为什么刚刚发布了文档中的文章以查明主要思想。
  • @FahriAzimov 我没有投反对票,但我认为原因很清楚。你没有回答我的问题。从我的问题中可以清楚地看出,我知道 DataSource 和 Delegate 协议的用途,但您的回答只解释了 DataSource 协议是什么。它根本没有回答我的问题。
  • @FahriAzimov 除了他说的话,看看我的 + 句
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-14
  • 1970-01-01
  • 1970-01-01
  • 2016-04-14
相关资源
最近更新 更多