以编程方式创建Sticker Pack,将UICollectionViewCell转换为MSStickerView

时间:2017-11-03 00:05:59

标签: swift programmatically-created imessage-extension msstickerview mssticker

所以,我选择在我的邮件扩展贴纸包中不使用故事板。 iMessage应用程序附带一个storyboard文件和一个MessagesViewController.swift。我创建了两个名为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工作流程??

1 个答案:

答案 0 :(得分:1)

很难确切地知道你的问题是什么,但是我可以告诉你的是没有带回贴纸子视图的StickerCell。与IB不同的是,您没有初始化您的贴纸视图。您需要添加一个init,它将创建视图并将视图添加到您的单元格。像(伪代码):

override init(frame: CGRect) {
    super.init(frame: frame)

    self.stickerView = StickerView()
    self.contentView.addSubview(self.stickerView)
    // Set up your constraints & layout
}