【发布时间】:2013-09-30 08:51:24
【问题描述】:
我有一个UICollectionView,它显示来自NSFetchedResultsController 的内容。 collectionView 有一个部分,在该部分中有一个标题。标题允许用户过滤集合视图中的内容。标题视图的委托连接到包含集合视图的UIViewController。
一旦用户更改了其中一个过滤器选项,标题视图就会向其委托人发送一条消息。委托更改其NSFetchedResultsController 的fetchRequest 上的谓词并调用-[NSFetchedResultsController performFetch:]。接下来,必须通知集合视图内容已更改。这可以通过多种方式完成,但我更喜欢的方式是调用-[UICollectionView reloadData]。不幸的是,这个方法不像预期的那样工作:当我调用这个方法时,整个集合视图消失了。以下是我对这个问题的一些看法:
- 第一个(也是唯一一个)部分的所有单元格和标题都将其
hidden标志设置为YES。我试图通过在-[UIView setHidden:]上设置符号断点来追踪是什么方法导致了这种情况。不幸的是,它永远不会在UICollectionView子视图中中断。 -
collectionView:cellForItemAtIndexPath:在调用-[UICollectionView reloadData]之后永远不会被调用。 -
在调用
-[UICollectionView reloadData]之后,永远不会调用collectionView:viewForSupplementaryElementOfKind:atIndexPath:。 -
numberOfSectionsInCollectionView:仍然被调用并且仍然返回正确的数字(在本例中为 1)。 -
collectionView:numberOfItemsInSection仍然被调用并且仍然返回正确的数字(在本例中为 1)。
到目前为止我为解决这个问题所做的尝试:
- 禁用
UICollectionViewFlowLayout实例上的所有自定义(sectionInset、itemSize) - 禁用
UICollectionView实例上的所有自定义 (separatorInset) - 将标题作为子视图添加到
UICollectionView,并相应地设置contentInset。不幸的是,UICollectionView不喜欢我调整它的自动布局约束并在我这样做时崩溃。 - 调用
[UICollectionView reloadSections:]而不是[UICollectionView reloadData]。这行得通,但我不喜欢动画。 - 在第一节中手动插入、删除和更新行。只要包含集合视图的视图控制器在内存中,它就可以工作。一旦释放,应用程序就会崩溃,并在
-[UICollectionView dealloc]中出现断言失败。
以这种方式设置标头感觉不对,但不幸的是UICollectionView 没有像UITableView (tableHeaderView) 这样的全局标头。
【问题讨论】:
-
嘿,找到解决办法了吗?
-
不,我不记得找到解决方案
-
好的,感谢您的回复。
标签: iphone ios objective-c cocoa-touch uicollectionview