我可以根据另一个单元格的状态在UITableView中显示/隐藏某个单元格吗?

Mar*_*uso 6 iphone cocoa-touch objective-c iphone-sdk-3.0

我有一个UITableView风格"Grouped",我用它在我的应用程序中设置一些选项.我希望这个UITableView的一个单元格只显示取决于是否激活了另一个UITableView的单元格.如果不是,则第一个单元格应该显示(最好是平滑动画),如果是,则第一个单元格应该隐藏.

我尝试返回nil适当-tableView:cellForRowAtIndexPath:的隐藏单元格,但这不起作用,而是抛出异常.

我目前陷入困境,没有想法如何解决这个问题,所以我希望你们中的一些人可以指出我正确的方向.

ger*_*ry3 11

您应该从表视图的数据源中删除隐藏单元格后面的数据.

例如,如果您正在使用数组,当发生导致隐藏单元格的操作时,您将从该数组中删除该行的对象.然后,作为表视图的数据源,该数组将返回少一个总计数,并且仅为该计数中的每一行返回有效单元格(不为零).

这种方法可能需要维护包含所有对象(包括隐藏)的第二个数组.

要更新视图,请查看reloadRowsAtIndexPaths:withRowAnimation : .


Dav*_*ney 9

这是一篇方便的文章,其中作者提供了一些在当前所选单元格上执行动画的源代码:

http://iphonedevelopment.blogspot.com/2010/01/navigation-based-core-data-application.html

他用这一个NSFetchedResultsController范围内,但你可以看到他是如何使用各种呼叫添加/删除细胞与部分.

现在,你的情况,你需要修改你使用主办用来生成您的tableView行中的数据,当您"激活"你的细胞,然后有选择地使用任何数组:

  • 的tableView:insertRowsAtIndexPaths:withRowAnimation:
  • 的tableView:deleteRowsAtIndexPaths:withRowAnimation:
  • 的tableView:insertSections:withRowAnimation:
  • 的tableView:deleteSections:withRowAnimation:

相应地调整事物(你可以从tableView:reloadData:开始,但效率很低).

我意识到API可能有点令人生畏,但要花时间阅读它并了解各种调用的作用.了解UITableView如何使用其数据源和委托,以及选择/删除单元格时发生的事件链等,如果您想要正确(并且无崩溃),这一点非常重要.