以编程方式为新的 CollectionView 添加 TabItem

Posted

技术标签:

【中文标题】以编程方式为新的 CollectionView 添加 TabItem【英文标题】:Programmatically add a TabItem for a new CollectionView 【发布时间】:2015-07-30 15:50:24 【问题描述】:

我是 XCode 新手,我正在尝试通过 ios8 应用实现以下目标:

    创建选项卡式应用程序

    使用包含文本字段和按钮的单个初始选项卡:

      创建一个新的 CollectionView 并添加一个新的标签项以访问它
    能够重复创建 n 次

第 1 步和第 2 步非常简单。我被困@第 3 点。现在在我的项目中,我有:

MyCollectionViewController 是默认 UICollectionViewController,我将 numberOfSectionsInCollectionView 更改为返回 1 个部分,将 numberOfItemsInSection 更改为 3 个单元格(reuseIdentifier 设置为“MyCell”)

FirstViewController.swift 带有:

一个 IBOutlet 到一个 UITextField (newTabItemName) 以获取用于新 TabItem 的标题

UIButton 的以下 IBAction:

@IBAction func generateNewTabItem(sender: UIButton) 
    let vc: MyCollectionViewController = MyCollectionViewController()
    vc.title = newTabItemName.text
    self.tabBarController?.viewControllers?.append(vc)

如果我运行应用程序,我会看到带有文本字段和按钮的初始视图;如果我更改文本并单击按钮,我会得到 TabItem。我也可以随心所欲地做 n 次。问题是,如果我单击其中一个新选项卡,我会收到以下错误:

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'UICollectionView must be initialized with a non-nil layout parameter'

我认为我离我需要的东西并不远,但我不知道缺少什么。

有什么建议吗?

谢谢。

再见...

【问题讨论】:

【参考方案1】:

正如错误所述,您无法在没有布局的情况下初始化 UICollectionView

请参阅initWithFrame:collectionViewLayout: 的文档,由我自己突出显示:

用于组织项目的布局对象。集合视图 存储对指定对象的强引用。 不能为零

UIKit 确实提供了UICollectionViewFlowLayout 形式的默认集合视图布局。如果你想做更复杂的事情,你必须创建一个UICollectionViewLayout 的自定义子类。

无论您在何处创建 UICollectionView(可能在 MyCollectionViewController 内)都需要更新以指定这样的布局。

【讨论】:

感谢您的回答;你能帮我写一段代码吗? 我还在研究它;任何其他建议都非常受欢迎。

以上是关于以编程方式为新的 CollectionView 添加 TabItem的主要内容,如果未能解决你的问题,请参考以下文章

以编程方式从 CollectionView 单元推送 viewController 不起作用 - swift

如何以编程方式将 CollectionView 滚动到底部

在 Swift 中以编程方式为 CollectionView 设置插图

Swift:如何以编程方式在 TableViewCell 中显示 CollectionView

如何以编程方式选择collectionview中的项目?

以编程方式为 safeArea 调整 collectionView