Добавьте UIViewController в UICollectionViewCell - PullRequest
0 голосов
/ 03 июня 2018

Я много читаю 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», причина: «- [Приложение.ViewController1 nsli_superitem]: нераспознанный селектор отправлен в экземпляр 0x7fb08df28ea0 '

1 Ответ

0 голосов
/ 03 июня 2018

Вы не можете добавить контроллер вида в такую ​​ячейку.Для того, чтобы делать то, что вы хотите, вам нужно использовать вид контейнера.В документации сказано, что:

Представление контейнера определяет область в подграфе представления контроллера представления, которая может включать дочерний контроллер представления.

Просто добавьте представление контейнера в свою ячейку(из раскадровки).

Чтобы подключить представление контейнера к вашему контроллеру представления (где у вас есть ячейки), вам нужно создать переход для встраивания.Для отправки данных в View Controller в prepare(forSegue:) вы проверяете пункт назначения и делаете то, что вам нужно.

...