Итак, я решил не использовать раскадровки в своем стикерпаке расширения сообщений. Приложение iMessage поставляется с файлом раскадровки и MessagesViewController.swift. Я создал 2 файла с именами CollectionViewController и StickerCell. Идея состоит в том, чтобы создать подкласс CollectionViewCell и преобразовать его в MSStickerView и удалить это представление из очереди в мой CollectionView как «ячейку».
Вот код для настройки «StickerCell» как MSSstickerView:
override func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let item = data[indexPath.row]
return deQStickerCell(for: item, at: indexPath)
}
private func deQStickerCell(for sticker: MSSticker, at indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView?.dequeueReusableCell(withReuseIdentifier: "Cell", for: indexPath) as! StickerCell
cell.stickerView.sticker = sticker
return cell
}
и код в моем классе StickerCell:
class StickerCell: UICollectionViewCell {
var stickerView: MSStickerView!
}
Я предполагаю, что проблема здесь, поскольку я успешно сделал это с раскадровкой и точным кодом в StickerClass, за исключением того, что var был IBOutlet. Так что явно что-то не подключается к CollectionView или я пропустил шаг. В Interface Builder я бы создал CollectionViewController, дал ему CollectionView, дал ему CollectionViewCell, затем наложил сверху UIView и изменил его класс на MSStickerView.
Как программно воссоздать рабочий процесс Interface Builder!?