以编程方式为新的 CollectionView 添加 TabItem
Posted
技术标签:
【中文标题】以编程方式为新的 CollectionView 添加 TabItem【英文标题】:Programmatically add a TabItem for a new CollectionView 【发布时间】:2015-07-30 15:50:24 【问题描述】:我是 XCode 新手,我正在尝试通过 ios8 应用实现以下目标:
-
创建选项卡式应用程序
使用包含文本字段和按钮的单个初始选项卡:
-
创建一个新的 CollectionView
并添加一个新的标签项以访问它
第 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
在 Swift 中以编程方式为 CollectionView 设置插图