1

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

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

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

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

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

但它不起作用

也许我需要在' '和' '中扩展MSStickerView并做一些事情。didTapdidLongPress

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

4

2 回答 2

3

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

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

(stickerView)?.isUserInteractionEnabled = false

collectionViewController 函数didSelectItemAt现在可以工作了。

于 2017-10-12T06:59:23.797 回答
0

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

例如,如果我想要一个带有免费和锁定贴纸的贴纸扩展,我会在我的UICollectionView. 一个有一个MSStickerView,第二个只有一个UIImageView。如果点击了一个免费的贴纸,iOS 会在UICollectionView代理未被解雇的情况下处理所有事情。但是,如果用户点击锁定的贴纸,代理将被触发,并且可以由代理处理didSelectItemAt

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

于 2017-10-01T20:30:10.237 回答