在UIStackView中添加轻击手势



我试图在collectionView单元格中将UITapGesture添加到UIStackView,但每次添加时,我的应用程序都会崩溃。(所有IBOutlets都连接)这是我做错了什么吗?

 let fGuesture = UITapGestureRecognizer(target: self, action: #selector(self.showF(_:)))
 cell.fstackView.addGestureRecognizer(fGuesture)
 func showF(sender: AnyObject){
        print(111)
    }

stackview是否已启用触摸?尝试设置用户交互参数

cell.fstackView.isUserInteractionEnabled = true 

如果应用程序因fatal error: unexpectedly found nil while unwrapping an Optional value而崩溃,则在将手势识别器添加到堆栈视图之前,可能需要添加一些延迟。

如果在集合视图单元格子类的init或集合视图的委托方法中访问堆栈视图属性,则堆栈视图可能尚未初始化。尝试使用计时器或GCD添加0.1秒延迟,它应该可以正常工作。。。

Timer.scheduledTimer(timeInterval: 0.1, target: self, selector: #selector(prepareStackView), userInfo: nil, repeats: false)

@objc func prepareStackView() {
    let tap = UITapGestureRecognizer(target: self, action: #selector(stackViewTapped))
    myStackView.addGestureRecognizer(tap)
}

在主线程中设置手势识别器:

DispatchQueue.main.async {
    self.view.gestureRecognizers = [self.tapGestureRecognizer]
}

我有UIButtons作为子视图,所以即使我在UIStackView中添加了手势,它也忽略了我的手势。

所以我添加了代码

button.isUserInteractionEnabled = false

让UIStackView接受我的触摸。

最新更新