UICollectionView中的UIViewController

我有一个全屏UICollectionView在我的应用程序。 它水平滚动,每个单元格填充集合视图的边界。 集合视图由UIViewControllerpipe理。

鉴于每个“页面”是相当复杂的,它是有意义的,每个页面本身由一个关联的UIViewControllerpipe理。 iOS 5支持视图控制器遏制,以便在视图连接和分离时,子控制器应该接收适当的生命周期方法(例如, viewWillAppear:等)。 这个视图回收有多好?

从页面“1”滚动到“2”,将创build一个新的视图(因为两者都可以在触屏时同时在屏幕上)。 从页面“2”移动到“3”, UICollectionView可以成功地将页面“1”的视图出列,但是现在发生了什么? 我会像这样强制插入视图到视图控制器三?

 id cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"ident" forIndexPath:indexPath]; UIViewController *child_controller = [self controllerAtIndexPath:indexPath]; [child_controller setView:cell]; // ... and so on 

这感觉不对 但是,我不能想到在这种情况下正确重用视图的正确方法。 我完全采取错误的做法吗?

我不认为UICollectionView是您的任务的最佳select。
像rob rob mayoff说:你可以使用UIPageViewController
另一个选项可以使用UIScrollView 3个子视图(previous,current,next)。 你将能够轻松地pipe理它的位置和滚动视图偏移来达到你想要的效果。
这在WWDC 2011的“高级滚动视图技术”中有描述。 你可以从那里获取源代码。

我做了同样的事情,但有两个视图控制器一次可见,可重新订购,所以集合视图是正确的select。

事实certificate,删除以前的视图控制器的视图,并添加一个新的造成相当的滚动性能,删除视图是最慢的方法。

如果单元格的新用途是相似的,但是不同的话 – 例如,您正在更改标签的文本或在图像视图中放置不同的图像,则对单元格的重复使用才有意义。 如果你正在剥离并replace整个视图层次结构,那么实际上并没有重复使用这个单元格。

我最终做的是为每个可以包含的视图控制器使用新的单元格。 在我的情况下,单元数量有一个限制,这意味着在同时运行许多视图控制器的情况下,内存消耗并没有真正的问题。

所以,简而言之 – 不要重复使用单元格。 这比保留旧的更昂贵。 向下滚动一百行的表格不同于在几个全屏幕视图之间滚动。 但是,鉴于你是全屏的,滚动视图可能是一个更好的select。

使用UIView子类(或UICollectionViewCell子类)而不是封装的UIViewControllers可能会更好。 封装的UIViewControllers必须具有其父视图控制器的知识,这可能会导致代码可维护性问题。

复杂性并不意味着你应该考虑采用UIViewController。 UIViews也可能相当复杂。 UIViewController的作用是提供额外的封装和生命周期,这听起来不像你需要的。

正如其他人所说,UIPageViewController似乎也是一个很好的select,但我不知道你的情况的具体情况。