UICollectionViewCell中的UICollectionView(Swift)
我试图在每个可重用的UICollectionViewCell
放置一个UICollectionViewCell
。 Ash Furrow方法对我来说工作不太好,因为使用一个UICollectionViewController
类作为数据源,而两个UICollectionViews
委托不起作用。
我最近的做法是将UICollectionViewController
的视图放入每个单元格中,如本问题和本文档中所述 。 但是,当我去尝试加载视图,我的应用程序冻结。 在Xcodedebugging导航器中,CPU处于常量的107%,几秒钟后内存接近1GB。
在这个例子中,我试图在每个MainCollectionViewControllerCell
获取一个ThumbnailCollectionViewController
。 每个ThumbnailCollectionViewControllerCell
唯一一个尺寸为50×50的图像。
这是如何正确完成的?
在MainCollectionViewController中
override func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell { let cell = collectionView.dequeueReusableCellWithReuseIdentifier(reuseIdentifier, forIndexPath: indexPath) as! UICollectionViewCell let thumbsViewController = self.storyboard?.instantiateViewControllerWithIdentifier("ThumbnailColllection") as! ThumbnailCollectionViewController self.addChildViewController(thumbsViewController) thumbsViewController.view.frame = cell.bounds cell.addSubview(thumbsViewController.view) thumbsViewController.didMoveToParentViewController(self) }
ThumbnailCollectionViewController
let reuseIdentifier = "ThumbCell" let thumbnails = ["red", "green", "blue"] override func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { return thumbnails.count } override func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell { let cell = collectionView.dequeueReusableCellWithReuseIdentifier(reuseIdentifier, forIndexPath: indexPath) as! UICollectionViewCell let cellImage = UIImage(named: thumbnails[indexPath.row]) let cellImageView = UIImageView(image: cellImage) cellImageView.frame = cell.bounds cell.addSubview(cellImageView) return cell }
您在每个单元格中放置UICollectionView
方法看起来不错,但是由于错误地处理了单元重用,您很可能会看到残酷的性能。 您正在向单元格添加新的集合视图(实际上,每个缩略图单元格都有一个新的图像视图)每次请求新的可重用单元格时。 如果你连续滚动,那么单元格将被取消, 已经添加了这些子视图,所以你将在每个单元格下结束许多子视图。
相反,添加一个方法来检查一个单元格是否已经有子视图,只有在没有的情况下才添加它。 可能最好的方法是使用自定义单元格子类:
class ThumbnailCollectionCell: UICollectionViewCell { var thumbnailViewController: ThumbnailCollectionViewController? }
回到你的MainCollectionViewController:
override func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell { let cell = collectionView.dequeueReusableCellWithReuseIdentifier(reuseIdentifier, forIndexPath: indexPath) as! ThumbnailCollectionCell if cell.thumbnailViewController == nil { let thumbsViewController = self.storyboard?.instantiateViewControllerWithIdentifier("ThumbnailColllection") as! ThumbnailCollectionViewController self.addChildViewController(thumbsViewController) thumbsViewController.view.frame = cell.bounds cell.addSubview(thumbsViewController.view) thumbsViewController.didMoveToParentViewController(self) cell.thumbnailViewController = thumbsViewController } }
再次,类似的东西,以防止多个UIImageView
被添加到每个缩略图单元格。
- 总是从表的第一个索引显示?
- 使用UIImagePickerController自定义“使用”,“取消”,“重拍”和“反向相机”button事件
- 从一个NSData对象在Swift中创build一个数组
- Cocoapods无法find标题xcode 6
- iOS体系结构:MVVM-C,服务(6/6)
- 使用HMAC SHA1的CCKeyDerivationPBKDF经常返回-1
- iOS UITableViewCell,UICollectionViewCell,UITableViewHeaderFooterView和UICollectionReusableView出队和注册-使用Swift协议和泛型
- view的hidden = yes和alpha = 0.0f有什么区别
- 初始屏幕上的Iphone简历