如何阻止在 iMessage 中选择贴纸

How to block the selection of a sticker in iMessage

我正在尝试制作一个非常简单的贴纸 iMessage 应用程序,当用户点击某些贴纸时,系统会建议用户进行应用内购买。

我有一个自定义视图控制器,它实现了 UIViewControllerUICollectionViewDelegateUICollectionViewDataSource(来源:https://github.com/jelenakrmar/customStickerApp)。

我现在正在尝试覆盖用户点击或剥离贴纸时的默认行为。

我的第一次尝试是在 collectionView 级别

func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
// open the in-app purchase window
}

但是没用

也许我需要扩展 MSStickerView 并在“didTap”和“didLongPress”中做一些事情。

有没有人有过在选择贴纸时覆盖 iMessage 行为的经验?

看起来,如果您的 UICollectionViewCell 有一个 MSStickerView(或者可能导入 Messages 框架),didSelectItemAt 委托不会被调用。

例如,如果我想要一个带有免费和锁定贴纸的贴纸扩展,我会在 UICollectionView 中创建两个不同的单元格。一个有 MSStickerView,第二个只有 UIImageView。如果点击免费贴纸,iOS 会处理所有事情,UICollectionView 代表不会被解雇。但是,如果用户点击锁定的贴纸,委托将触发,并且可以由 didSelectItemAt 委托处理。

我还没有找到任何指向这一点的文档。

我处于类似情况并且有一个 UICollectionController 通过我的 UICollectionViewCell 中的 MSStickerView 加载贴纸。

我将 UICollectionViewCell 子类化并将 MSStickerView 放置到单元格 contentView 上。在此之后,我通过以下方式禁用了触摸:

(stickerView)?.isUserInteractionEnabled = false

collectionViewController 函数 didSelectItemAt 现在可用。