为什么tableView:canMoveRowAtIndexPath:在UITableViewDataSource协议中?

时间:2016-03-12 08:22:37

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

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

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

对于哪些方法属于数据源协议以及属于委托协议的一般说明也很受欢迎。

2 个答案:

答案 0 :(得分:2)

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

数据源方法通常与表视图的内容有关。通常情况下,显示的内容的顺序是固定的。假设表格视图显示在公交线路上的停靠点或书籍的章节标题。您不能让用户重新排序:内容本身不支持。

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

答案 1 :(得分:-1)

UITableViewDatasource协议documentation

  

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

     

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

     

协议所需的方法提供要显示的单元格   通过表视图以及通知UITableView对象   部分的数量和每个部分的行数。数据   source可以实现可选方法来配置各个方面   表视图以及插入,删除和重新排序行。

希望,这可以解决问题。

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