Созданный контроллер представления с идентификатором из раскадровки, но не получил UICollectionView - PullRequest
0 голосов
/ 29 августа 2018

Привет, ребята, я получаю эту ошибку, и я не настолько эксперт в этой области, я только сейчас учусь, и я не очень уверен, откуда это взялось. Этот контроллер представления был сделан на раскадровке, но теперь я пытался преобразовать его в коллекцию View программным способом, и выскочила ошибка, моя проблема в том, когда я запускаю приложение и пытаюсь открыть «Open Projects», который также был построен на раскадровке / Панель меню была сделана на коде. Кто-нибудь запускал эту ошибку слишком раньше, что это значит?

ошибка:

Завершение работы приложения из-за необработанного исключения NSInternalInconsistencyException, причина: '- экземпляр представления контроллера [UICollectionViewController loadView] с идентификатором из раскадровки "Main", но не получен UICollectionView.

Ниже приведен код:

class Mix_Section: UICollectionViewController {


var projects : ProjectCD? 



lazy var settingsLauncher : SettingsLauncher = {
    let launcher = SettingsLauncher()
    launcher.Section = self
    return launcher

}()


override func viewDidLoad() {
    super.viewDidLoad()





    collectionView?.register(MenuBar.self, forCellWithReuseIdentifier: "cellId")
}    


private func setupMenuBar() {


   // navigationController?.hidesBarsOnSwipe =  true
    navigationController?.navigationBar.shadowImage = UIImage()
    view.addSubview(menuBar)
    view.addConstraintsWithFormat(format: "H:|[v0]|", views: menuBar)
    view.addConstraintsWithFormat(format: "V:|[v0(50)]|", views: menuBar)

    menuBar.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor).isActive = true



    let brownView = UIView()
    brownView.backgroundColor = .brown
    view.addSubview(brownView)
    view.addConstraintsWithFormat(format: "H:|[v0(50)]|", views: brownView)
}

Вот код для класса строки меню (который является текущим представлением коллекции, над которым я работаю):

 Class MenuBar: UIView, UICollectionViewDataSource, UICollectionViewDelegate, 
 UICollectionViewDelegateFlowLayout{


var horizontalBarLeftAnchorConstraint: NSLayoutConstraint?

lazy var collectionView: UICollectionView = {
    let layout = UICollectionViewFlowLayout()

    let cv = UICollectionView(frame: .zero, collectionViewLayout: layout)

    cv.backgroundColor = .brown
    cv.tintColor = .white

    cv.dataSource = self
    cv.delegate = self

    return cv

}()

let cellId = "cellId"

//if the view controller is mixing vc or mastering vc

let imageNames = ["to-do", "task", "more-details", "extra-features"]


override init(frame: CGRect) {
    super.init(frame: frame)


    collectionView.register(MenuCell.self, forCellWithReuseIdentifier: cellId)


    addSubview(collectionView)
    addConstraintsWithFormat(format:"H:|[v0]|", views: collectionView)
    addConstraintsWithFormat(format:"V:|[v0]|", views: collectionView)

    let selectedIndexPath = IndexPath(item: 0, section: 0)

    collectionView.selectItem(at: selectedIndexPath, animated: false, scrollPosition: .left)

    setupHorizontalBar()

}


func setupCollectionView() {

    collectionView.backgroundColor = .white
    collectionView.register(MenuCell.self, forCellWithReuseIdentifier: "cellId")

    collectionView.contentInset = UIEdgeInsets(top: 50, left: 0, bottom: 0, right: 0)
    collectionView.scrollIndicatorInsets = UIEdgeInsets(top: 50, left: 0, bottom: 0, right: 0)

}

func setupHorizontalBar() {
    if let flowLayout = collectionView.collectionViewLayout as? UICollectionViewFlowLayout {
        flowLayout.scrollDirection = .horizontal
        flowLayout.minimumLineSpacing = 0
    }


    let horizontalBarView = UIView()
    horizontalBarView.backgroundColor = .white
    horizontalBarView.translatesAutoresizingMaskIntoConstraints = false
    addSubview(horizontalBarView)

    //old method
    //horizontalBarView.frame = CGRect(x: , y: , width: , height: )

    //need x,y,width,heightConstraints

    horizontalBarLeftAnchorConstraint = horizontalBarView.leftAnchor.constraint(equalTo: self.leftAnchor)
    horizontalBarLeftAnchorConstraint?.isActive = true
    horizontalBarView.bottomAnchor.constraint(equalTo: self.bottomAnchor).isActive = true
    horizontalBarView.widthAnchor.constraint(equalTo: self.widthAnchor, multiplier: 1/4).isActive = true
    horizontalBarView.heightAnchor.constraint(equalToConstant: 8).isActive = true

}

 func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
    return 4
}

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {

    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: cellId, for: indexPath) as! MenuCell


    cell.imageView.image = UIImage(named: imageNames[indexPath.item])?.withRenderingMode(.alwaysTemplate)

    if indexPath.item == 4 {
        cell.backgroundColor = UIColor.ultralightgray

    }

    return cell

}

func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
    print(indexPath.item)

    let x = CGFloat(indexPath.item) * frame.width / 4
    horizontalBarLeftAnchorConstraint?.constant = x

    UIView.animate(withDuration: 0.75, delay: 0, usingSpringWithDamping: 1, initialSpringVelocity: 1, options: .curveEaseOut, animations: {
        self.layoutIfNeeded()
    }, completion: nil)


}

//for space in between cells
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumInteritemSpacingForSectionAt section: Int) -> CGFloat {

    return 0
}

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {

    return CGSize(width: frame.width / 4, height: frame.height)

}

required init?(coder aDecoder: NSCoder) {
    fatalError("init(coder:) has not been implemented")
   }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...