gpt4 book ai didi

ios - 包装在 UIViewController 中的 UICollectionView

转载 作者:行者123 更新时间:2023-11-28 13:21:12 24 4
gpt4 key购买 nike

我有一个 UICollectionView,我通过 Storyboard将其放置在自定义 UIViewController 中,并将其前导/尾随/顶部/底部空间固定到其 super View 。

然后我有一个应该使用 Collection View 的自定义 UICollectionViewController 子类。所以在 super View 的 UIViewController (PrimaryViewController) 中,我有一个 Collection View 的导出,我实例化了我的自定义 UICollectionViewController。我为它分配 Collection View ,并将自定义 UICollectionViewController 分配为 Collection View 的委托(delegate)和数据源。

但是当我运行它时, Collection View 并没有出现在屏幕上。很明显 viewDidLoad() 没有在自定义 UICollectionViewController 类中被调用,所以要么我遗漏了一个关键部分,要么我以错误的方式接近它.

有人能告诉我如何构建 Collection View (通过 Storyboard 放置)和自定义 UICollectionViewController 类(仅代码)之间的连接,使其正常工作吗?

到目前为止,这是我的(简化的)代码......

class PrimaryViewController : UIViewController {
@IBOutlet private weak var _collectionView:UICollectionView!
private var _collectionViewCtrl:CustomCollectionViewController!

override func viewDidLoad() {
super.viewDidLoad()
_collectionViewCtrl = CustomCollectionViewController(collectionView: _collectionView)
}
}


class CustomCollectionViewController : UICollectionViewController {
init(collectionView:UICollectionView) {
super.init(nibName: nil, bundle: nil)

self.collectionView = collectionView
self.collectionView.delegate = self
self.collectionView.dataSource = self
}

required init(coder aDecoder:NSCoder) {
super.init(coder: aDecoder)
}

override func viewDidLoad() {
super.viewDidLoad()
}
}

最佳答案

在 IB 或您的 Storyboard 中,您可以使用容器 View 并将自定义 Collection View Controller 嵌入其中。这使您能够在其自己的上下文中操作每个 View Controller ,因为它们每个都有自己的 nib,并且将自动神奇地处理实例化您的 Collection View Controller 。

您的 PrimaryViewController 可以如下所示:

class PrimaryViewController : UIViewController {
@IBOutlet private weak _collectionView: UIView
private var _collectionViewController: CustomCollectionViewController! {
// ???: You can also iterate through child view controllers looking for a class match if you embed other controllers.
return self.childViewControllers[0] as CustomCollectionViewController!
}

override func viewDidLoad() {
super.viewDidLoad()
}
}

它还会调用 CustomCollectionViewController 上的 viewDidLoad()。您可以通过_collectionView 属性隐藏和显示 View ,也可以通过_collectionViewController 直接操作它。

痛苦来自任何可能是外观逻辑的逻辑(viewWillAppear(_: Bool)viewWillDisappear(_: Bool) 等),因为您将必须自己触发。

你的 Storyboard应该看起来像这样(我的容器 View 是隐藏的):

Storyboard example

关于ios - 包装在 UIViewController 中的 UICollectionView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25629320/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com