快速在视图控制器中加载集合视图控制器

Posted

技术标签:

【中文标题】快速在视图控制器中加载集合视图控制器【英文标题】:Load a collection view controller inside a view controller in swift 【发布时间】:2016-07-24 05:01:42 【问题描述】:

我有一个选项卡视图控制器,其中一个选项卡是视图控制器。当用户使用 swift 点击图像时,我需要能够在该视图控制器中加载集合视图控制器。 这可以通过编程方式完成吗?我的选项卡视图控制器中有 3 个选项卡,只需要为其中一个而不是全部执行此操作。 到目前为止我做了什么: 添加了一个新的 swift 文件。主页.swift 添加到它:

class EventsController: UICollectionViewController

    override func viewDidLoad() 
        super.viewDidLoad()
        print("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!")
    

然后我将视图控制器的类更改为EventsController,但是它抛出了以下异常: 异常“NSInternalInconsistencyException”,原因: [UICollectionViewController loadView] 实例化视图控制器 来自故事板 Main 的标识符 Home,但没有获得 UICollectionView

【问题讨论】:

【参考方案1】:

你可以做的是创建一个 UICollectionViewController 类,它是 UIViewController 的子类。您可以通过这样做非常轻松地做到这一点:

class CustomTabBarController: UITabBarController 
    override func viewDidLoad() 
    super.viewDidLoad()
    let homeImage = UIImage(named: "home")
    let mainController = MainCollectionViewController(collectionViewLayout: UICollectionViewFlowLayout())
    let navigationController = UINavigationController(rootViewController: mainController)


    viewControllers = [navigationController]

请注意,您必须指定 UICollectionViewController 的布局。

现在你的 UICollectionViewController 类:

class MainCollectionViewController: UICollectionViewController 
    override func viewDidLoad() 
    super.viewDidLoad()
    // code goes here
    

【讨论】:

对不起,我不能关注这个。正如我所说,我已经添加了一个新的视图控制器作为我的标签栏控制器的新标签。我添加了一个新的 swift 文件 home.swift,并在其中添加了这个类:class EventsController: UICollectionViewController override func viewDidLoad() super.viewDidLoad() print("!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!") //collectionView?.registerClass(EventCell.self, forCellWithReuseIdentifier: cellId) 哪一部分让你感到困惑? 正如我所说,我已经添加了一个新的视图控制器作为我的标签栏控制器的新标签。我添加了一个新的 swift 文件 home.swift,并在其中添加了这个类: class EventsController: UICollectionViewController override func viewDidLoad() super.viewDidLoad() print("!!!!") 然后我设置该选项卡将使用此类。结果是:异常 'NSInternalInconsistencyException',原因:[UICollectionViewController loadView] 使用故事板 Main 中的标识符 Home 实例化了视图控制器,但没有得到 UICollectionView 我也在我的问题中添加了更多细节,希望它能澄清我需要做什么。

以上是关于快速在视图控制器中加载集合视图控制器的主要内容,如果未能解决你的问题,请参考以下文章

在导航视图控制器中加载特定视图

在标签栏控件中加载视图控制器

如何在 Swift 中加载初始视图控制器?

在 xib 文件中加载视图控制器

iphone - 在视图控制器中加载表格视图时出现问题

无法在 UIView 中加载控制器的视图