swift - 以编程方式创建贴纸包,将 UICollectionViewCell 转换为 MSStickerView 时出现问题

标签 swift programmatically-created imessage-extension msstickerview mssticker

因此,我选择在我的消息扩展贴纸包中不使用 Storyboard。 iMessage 应用程序带有 Storyboard文件和 MessagesViewController.swift。我创建了 2 个名为 CollectionViewController 和 StickerCell 的文件。这个想法是将 CollectionViewCell 子类化并将其转换为 MSStickerView 并将该 View 作为“单元格”出列到我的 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!
}

我猜问题就在这里,因为我已经成功地使用 Storyboard和 StickerClass 中的确切代码完成了此操作,除了 var 是一个 IBOutlet。很明显有些东西没有连接到 CollectionView 或者我错过了一步。在 Interface Builder 中,我会创建 CollectionViewController,给它一个 CollectionView,给它一个 CollectionViewCell,然后在上面放一个 UIView 并将它的类更改为 MSStickerView。

如何以编程方式重新创建 Interface Builder 工作流程!?

最佳答案

很难确切知道您的问题是什么,但据我所知,您没有返回带有 stickerView subview 的 StickerCell。与 IB 不同的是,您永远不会初始化 stickerView。您需要添加一个 init 来创建 View 并将其添加到您的单元格中。类似于(伪代码):

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

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

关于swift - 以编程方式创建贴纸包,将 UICollectionViewCell 转换为 MSStickerView 时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47086515/

相关文章:

swift - Swift 协议(protocol)类型别名中的默认类型可能吗?

ios - 在 cellForRowAt indexPath 方法之外获取选定的行号

ios - 切换 View Controller 时我在 Xcode 中出错

ios - 如何以编程方式填充 switch case 值?

ios - iMessage 当前用户名为零

ios - 在 ARKit 中使用物理时,是什么导致 SCNNode 不相互接触?

ios - 如何在 Firebase 中附加到带有其他对象的路径?

ios - 程序化自动布局 UI 元素

ios - iMessageExt 应用启动应用时出错

ios - CFBundleVersion 不匹配 - CFBundleVersion 值与其包含的 iOS 应用程序的 CFBundleVersion 值不匹配