Создание пакета стикеров программно, проблема с приведением 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
}
Другие вопросы по тегам