将UIViewController添加到UICollectionViewCell

时间:2018-06-03 10:47:47

标签: swift uiviewcontroller uicollectionview uicollectionviewcell

我阅读了很多Stackoverflow,但我无法弄清楚如何去做。

我将UIViewController添加到UICollectionViewCell,其中包含四个不同的单元格,其中一个单元格的视图非常复杂,数据也在不断变化,因此我想为此添加一个控制器图。

由于没有UIViewController,我无法弄清楚如何将addChildViewController添加到单元格。

我的ViewController:

class ViewController1: UIViewController {


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

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

}

我的CollectionViewCell:

class CollectionViewCell1: UICollectionViewCell {


    lazy var viewController: ViewController1 = {
        let storyboard = UIStoryboard(name: "Main", bundle: nil)
        let vc = storyboard.instantiateViewController(withIdentifier: "ViewController1") as! ViewController1
        return vc
    }()

    override init(frame: CGRect) {
        super .init(frame: frame)
        print("Initiatetd")
        setUpViews()


    }

    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been impemented")
    }

    func setUpViews() {
        addSubview(viewController.view)
        let views: [String: Any] = ["viewController": viewController]
        addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "H:|[viewController]|", options: [], metrics: nil, views: views))
        addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "V:|-[viewController]-|", options: [], metrics: nil, views: views))
    }
}

我收到此错误:

  

由于未捕获的异常而终止应用   ' NSInvalidArgumentException',原因:' - [App。 ViewController1   nsli_superitem]:发送到实例的无法识别的选择器   0x7fb08df28ea0'

1 个答案:

答案 0 :(得分:0)

您无法将视图控制器添加到这样的单元格中。为了做你想做的事,你需要使用容器视图。文档说:

  

容器视图定义视图控制器的视图子图中可包含子视图控制器的区域。

只需将容器视图添加到您的单元格(来自故事板)。

要将容器视图连接到View Controller(您有单元格),您需要创建一个嵌入segue。要在prepare(forSegue:)中向View Controller发送数据,请检查目的地并执行所需操作。