Подвид пользовательской ячейки UICollectionView равен нулю, хотя и связан с раскадровкой - PullRequest
0 голосов
/ 02 мая 2018

Я создал контроллер вида программно. Я не использую Storyboard, потому что этот контроллер представления должен быть представлен несколькими контроллерами представления, и мне не нравится, когда мой Storyboard выглядит слишком сложным.

Этот контроллер представления содержит UICollectionView, чьи ячейки настраиваются через раскадровку, называемую CustomCell.xib, в которой в качестве подпредставления есть только UIImageView.

Затем я создал файл CustomCell.swift и сделал его владельцем файла CustomCell.xib. Я также перетащил и связал UIImageView с CustomCell.swift:

class CustomCell: UICollectionViewCell {
    @IBOutlet weak var imageView: UIImageView!

    prepareForReuse() {
        imageView.image = nil
    }
}

Тогда, на мой взгляд, контроллеры viewDidLoad и cellForItemAt:

override func viewDidLoad() {
    let layout = UICollectionViewFlowLayout()
    layout.scrollDirection = .horizontal
    let myCollectionView = UICollectionView.init(frame: view.bounds,
                                                 collectionViewLayout: layout)

    myCollectionView.register(CustomCell.self, forCellWithReuseIdentifier: "Cell")

    view.addSubview(myCollectionView)
}

cellForItemAt(...) {
    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "Cell",
                                                  for: indexPath) as! CustomCell

    cell.imageView.image = ...        // <---"imageView" is nil when running, why?

    return cell
}

Почему возникает эта проблема?

Ответы [ 3 ]

0 голосов
/ 03 мая 2018

Убедитесь, что владельцем файла этого XIB является ViewController, на котором размещена ваша CustomCell

0 голосов
/ 03 мая 2018

Вам нужно зарегистрировать перо, а не класс для вашей ячейки.

myCollectionView.register(UINib(nibName:"CustomCell.xib",bundle:nil), forCellWithReuseIdentifier: "Cell")
0 голосов
/ 02 мая 2018

Проблема в том, что вы создали изображение в XIB, но никогда не регистрировали его.

Либо используйте эту перегрузку: .register (UINib (, ), forCell: "Ячейка")

Или удалите xib и управляйте всем макетом программно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...