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

Iphone 我可以根据另一个单元格的状态在UITableView中显示/隐藏某个单元格吗?,iphone,objective-c,cocoa-touch,iphone-sdk-3.0,Iphone,Objective C,Cocoa Touch,Iphone Sdk 3.0,我有一个样式为“分组”的UITableView,用于在我的应用程序中设置一些选项。我希望此UITableView的一个单元格仅显示,具体取决于此UITableView的另一个单元格是否激活。如果不是,则应显示第一个单元格(最好使用平滑动画),如果是,则应隐藏第一个单元格 我尝试在相应的-tableView:cellforrowatinexpath:中返回nil以隐藏单元格,但这不起作用,而是引发异常 我目前还没有办法解决这个问题,所以我希望你们中的一些人能给我指出正确的方向。您应该从表视图的数据

我有一个样式为“分组”的UITableView,用于在我的应用程序中设置一些选项。我希望此UITableView的一个单元格仅显示,具体取决于此UITableView的另一个单元格是否激活。如果不是,则应显示第一个单元格(最好使用平滑动画),如果是,则应隐藏第一个单元格

我尝试在相应的
-tableView:cellforrowatinexpath:
中返回
nil
以隐藏单元格,但这不起作用,而是引发异常


我目前还没有办法解决这个问题,所以我希望你们中的一些人能给我指出正确的方向。

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

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

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


要更新视图,请签出。

在调用cellForRowAtIndexPath之前,先调用numberOfRowsInSection。您应该在该部分中返回适当的单元格值,因此如果您只想显示1个单元格,请返回一个。显示单元格的逻辑必须在这两种方法中部分实现

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

他在NSFetchedResultsController上下文中使用了这个,但是您可以看到他如何使用各种调用来添加/删除单元格和节

现在,在您的情况下,当您“激活”单元格时,您需要修改用于承载用于在tableView中生成行的数据的任何数组,然后有选择地使用:

  • tableView:insertRowsAtIndexPaths:WithRowsAnimation:
  • tableView:deleteRowsAtIndexPaths:withRowAnimation:
  • tableView:insertSections:withRowAnimation:
  • tableView:deleteSections:withRowAnimation:
相应地进行调整(可以从tableView:reloadData:开始,但效率很低)


我意识到API可能有点让人望而生畏,但请花时间通读它,并了解各种调用的作用。了解UITableView如何使用其数据源和委托,以及在选择/删除单元格时发生的事件链等,如果您想让事情变得恰到好处(并且不会崩溃),这一点非常重要。

谢谢,我在您的帖子的帮助下找到了答案!:)谢谢,这也很有帮助。A只要我的名声允许,我会投票表决。
[tableView beginUpdates];
[tableView deleteRowsAtIndexPaths:withRowAnimation:]; // or insertRowsAtIndexPaths:withAnimation:
[tableView endUpdates];