我在桌面视图单元格上有一个长按手势(只有一行),然后打开一个弹出窗口。当我关闭此弹出窗口,然后再次点击该单元格时,它不会注册第一次点击。单元格touchesBegan
会被调用,但在tableView.didSelectRowAtIndexPath
中,第一次点按即不会被调用。
这可能是什么原因?
我试过了:
摘要:
代码:
class CustomCell: UITableViewCell {
weak var delegate: VC1Delegate? { didSet { addGestureRecognizer(detailsGesture) } }
lazy var detailsGesture: gesture = {
let gesture = UILongPressGestureRecognizer(target: self.delegate, action: #selector(VC1.openPopup))
gesture.delegate = self
return gesture
}()
// Setup of the view cell
}
class VC1: UIViewController, UITableViewDataSource, UITableViewDelegate, VC1Delegate {
func openPopup(recognizer: UILongPressGestureRecognizer) {
if recognizer.state == .Began {
// Open popup
}
}
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
print("cell tapped")
}
}
经过无休止的尝试和测试后发现问题是由以下原因导致的:
tableView.scrollEnabled = false
知道为何禁用滚动导致此问题?
另一个"修复"是通过打电话而不是称之为超级:
override func touchesCancelled(touches: Set<UITouch>?, withEvent event: UIEvent?) { }
但我不确定我是否应该这样做。