Как подключить пользовательскую коллекцию viewCell к повторному идентификатору с помощью XIB - Swift - PullRequest
0 голосов
/ 22 декабря 2018

Я создаю настраиваемую ячейку коллекционного вида, используя XIB.

Коллекционный вид помещается в viewController как расширение.

Это код, который я использую для вызова Xib View, но я получаю ошибку, сообщающую мне, что мне нужно использовать reuseidentifier.Но я понятия не имею, как использовать это при использовании XIB.

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

        let cell = Bundle.main.loadNibNamed("CustomCell", owner: self, options: nil)?.first as! CustomCell

        return cell
    }

Завершение приложения из-за необработанного исключения «NSInternalInconsistencyException», причина: «ячейка, возвращенная из -collectionView: cellForItemAtIndexPath: не имеет reuseIdentifier - ячейки должны быть получены путем вызова -dequeueReusableCellWithRedentifIx»: '*** Первый стек вызовов вызовов:

Ответы [ 3 ]

0 голосов
/ 22 декабря 2018

Вы можете зарегистрировать CustomCell как,

let customCellNib = UINib(nibName: "CustomCell", bundle: .main)
collectionView.register(customCellNib, forCellWithReuseIdentifier: "CustomCell")

И использовать ту же зарегистрированную ячейку в cellForItemAt как,

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
    guard let cell = collectionView.dequeueReusableCell(withReuseIdentifier:"CustomCell", for: indexPath) as? CustomCell else {
        return UICollectionViewCell()
    }
    return cell
}
0 голосов
/ 23 декабря 2018

Для Swift 4.0 и 4.2

В вашем viewDidLoad :

настраиваемая коллекция ViewCell

mainCollectionView.register(UINib(nibName: "your_custom_cell_name", bundle: nil), forCellWithReuseIdentifier: "your_custom_cell_identifier")

В cellForItemAt indexPath:

let cell : <your_custom_cell_name> = mainCollectionView.dequeueReusableCell(withReuseIdentifier: "your_custom_cell_identifier", for: indexPath) as! <your_custom_cell_name>

И не забудьте установить идентификатор для пользовательской ячейки в разделе xib.

0 голосов
/ 22 декабря 2018

Сначала вам нужно создать reuseIdentifier для вашей ячейки.Давайте создадим его на основе вашего имени класса collectionViewCell.Объявите reuseId в своем файле ViewController:

let reuseId = String(describing: CustomCell.self)

Вам необходимо зарегистрировать свою ячейку в свой collectionView в методе viewDidLoad.

collectionView.register(CustomCell.self, forCellReuseIdentifier: reuseId)

Тогда в вашем cellForItemAt методе:

guard let cell = collectionView.dequeueReusableCell(withIdentifier: reuseId, for: indexPath) as? CustomCell else { return UICollectionViewCell() }
//return cell, or update cell elements first.
...