Swift:无法在 UICollectionView 中以编程方式选择 MStickerView?



好吧,我在uicollectionView中以编程方式选择了类似的帖子,并尝试了自己的方法,但是我无法使用Swift在编程中创建的UicollectionView中选择一个项目。

我正在构建一个iMessage扩展程序,然后我将UicollectionView存储以存储自定义的MSStickerviews而不是MSStickerBrowser。我像这样创建了我的MSStickerviews,它们在MSStickerview上具有自定义类,以检测它们何时被剥离或挖掘:

var url: URL?
        var i = 1
        while i < 5 { //while true
            url = Bundle.main.url(forResource: "test5", withExtension: "png") //would be "test(i)"
            print("URL IS THIS: (url)")
            guard let url = url else { break }
            //make it a sticker
            let sticker = try! MSSticker(contentsOfFileURL: url, localizedDescription: "test(i)")
            //let stickerView = InstrumentedStickerView(frame: CGRect(x: 0, y: 0, width: view.bounds.width*0.4, height: view.bounds.width*0.4))
            let stickerView = InstrumentedStickerView(frame: CGRect(origin: CGPoint(x: 0,y :0), size: stickerSize))
            stickerView.sticker = sticker
            stickerView.delegate = self
            starterPack.append(stickerView)
            i += 1

然后在我从另一个帖子中采用的自定义类中:

protocol InstrumentedStickerViewDelegate: class {
    func stickerViewDidSelect(stickerView: MSStickerView)
    func stickerViewDidPeel(stickerView: MSStickerView)
}
class InstrumentedStickerView: MSStickerView {
    weak var delegate: InstrumentedStickerViewDelegate?
    override init(frame: CGRect) {
        super.init(frame: frame)
        for gestureRecognizer in gestureRecognizers ?? [] {
            if let tapGestureRecognizer = gestureRecognizer as? UITapGestureRecognizer {
                tapGestureRecognizer.addTarget(self, action: #selector(didTap))
            } else if let longPressGestureRecognizer = gestureRecognizer as? UILongPressGestureRecognizer {
                longPressGestureRecognizer.addTarget(self, action: #selector(didLongPress))
            }
        }

    }
    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
    func didTap(tapGestureRecognizer: UITapGestureRecognizer) {
        if tapGestureRecognizer.state == .recognized {
            delegate?.stickerViewDidSelect(stickerView: self)
        }
    }
    func didLongPress(longPressGestureRecognizer: UILongPressGestureRecognizer) {
        if longPressGestureRecognizer.state == .began {
            delegate?.stickerViewDidPeel(stickerView: self)
        }
    }
}

我的问题是,我需要能够(例如使用按钮)以编程方式(例如使用按钮)在收集视图中选择我的贴纸视图之一。意味着模拟用户点击贴纸并将其显示在iMessage文本条目字段中。

我不知道该如何直接将贴纸直接放在入口字段中,这就是为什么我要使用模拟敲击方法。

我的收集视图有一个标题,我尝试使用以下内容来选择集合视图中的项目,但是当我放入0,0时,试图导航不同的行/部分(怀疑它正在选择)标题)和其他任何事情都无能为力,要么毫无根据的异常错误:

collectionView.selectItem(at: IndexPath(row: 0, section: 1), animated: false, scrollPosition: UICollectionViewScrollPosition.left)

我直接从类中调用了DIDTAP和自定义函数,但这并未选择刚刚称为函数的贴纸:

stickerViewDidSelect(stickers[1])

我需要找到一种方法来触发MSSTICKERVIEW/MSSTICKER上的TAP事件,以将其放在入口字段中。我该怎么做?

在集合观看中使用的Indexpath不是行,而是部分和部分。使用:

启动indexpath
IndexPath(item: itemToSelect, section: 0)

itemToselect是您想要的项目的int您应该能够选择所需的项目。

相关内容

  • 没有找到相关文章

最新更新