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

时间:2015-07-30 15:50:24

标签: ios xcode swift uicollectionview uitabbaritem

我是一名XCode新手,我正在尝试使用iOS8应用程序实现以下功能:

  1. 创建选项卡式应用程序
  2. 包含一个包含文本字段和按钮的初始标签:

    1. 创建一个新的CollectionView
    2. 并添加新标签项以便与其联系
  3. 能够重复创作n次
  4. 步骤1和2非常简单。我被困在@第3点。现在在我的项目中我有:

    • MyCollectionViewController是一个默认的UICollectionViewController,我在其中更改numberOfSectionsInCollectionView以返回1个section而numberOfItemsInSection获取3个单元格(reuseIdentifier设置为“MyCell”)
    • FirstViewController.swift with:

      • 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 个答案:

答案 0 :(得分:0)

由于错误说明,如果没有布局,则无法初始化UICollectionView

请参阅我自己强调的initWithFrame:collectionViewLayout:文档:

  

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

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

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