我试图在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接受我的触摸。