Создание пакета стикеров программно, проблема с приведением UICollectionViewCell к MSStickerView
Поэтому я решил не использовать раскадровки в наборе наклеек для расширений сообщений. Приложение 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 или я пропустил шаг. В Интерфейсном Разработчике я хотел бы создать CollectionViewController, дать ему CollectionView, дать ему CollectionViewCell, затем добавить UIView сверху и изменить его класс на MSStickerView.
Как программно воссоздать рабочий процесс Interface Builder!?
1 ответ
Трудно точно понять, в чем заключается ваша проблема, но из того, что я могу вам сказать, вы не получаете обратно StickerCell с подпредставлением стикера ViewView. Что отличается от IB, так это то, что вы никогда не инициализируете свой наклейку ViewView. Вам нужно добавить init, который создаст и добавит представление в вашу ячейку. Что-то вроде (псевдокод):
override init(frame: CGRect) {
super.init(frame: frame)
self.stickerView = StickerView()
self.contentView.addSubview(self.stickerView)
// Set up your constraints & layout
}