UITableView方法“deleteRowsAtIndexPaths:withRowAnimation:”有什么作用?

时间:2009-05-14 01:54:49

标签: iphone cocoa-touch uikit

********更新问题**********

如果tableview不影响模型: 是否更改了屏幕上单元格的索引路径以反映其实际位置,或者在调用reloadData之前,已删除单元格的索引是否不可见?

*******原始问题**********

我知道它标记了要删除的细胞并动画删除,但它对模型有什么作用?

它是否会影响模型(我无法想象)?

细胞“仍在那里”但是看不见吗?

当用户开始滚动时,是否会跳过已删除索引的委托调用?

是否希望您更新模型?

到目前为止我所阅读的内容似乎含糊不清......

2 个答案:

答案 0 :(得分:5)

  • (void)deleteRowsAtIndexPaths:(NSArray *)indexPaths           withRowAnimation:(UITableViewRowAnimation)动画;

从tableView中删除一行。它根本不会修改您的模型。你必须自己做。单元格将被删除,但如果在从模型中删除行之前调用reloadData。细胞将再次出现。

所以,是的,它希望你更新你的模型。

答案 1 :(得分:1)

UITableView是一个VIEW,记住UIKit是基于MVC的。您有责任更新模型。事实上,您的控制器可能会调用(void)deleteRowsAtIndexPaths:(NSArray *)indexPaths withRowAnimation:(UITableViewRowAnimation)animation;以响应观察(或被通知)模型中的更改。

例如,假设您有一个“删除10个随机项目”。正确的流程是:

  1. 查看 - 用户按下按钮
  2. 控制器 - 接收按钮更新模型
  3. controller - 观察模型的变化
  4. 查看更新列表
  5. 虽然感觉有点做作 - 为什么不让视图更新列表并告诉模型?它会使更容易理解的更好的代码更好用UIKit。例如,这种设计并不假设2和3中的控制器是相同的控制器,因此您具有更大的灵活性。

    我通常会将YAGNI应用于ll设计,但我相信强大的MVC专注os UIKit意味着YAGNT(你会......)