UITableView 作为 UIGestureRecognizerDelegate
UITableView as UIGestureRecognizerDelegate
我想通过添加自定义 UIPanGestureRecognizer
来扩展 UITableView
:
extension UITableView {
func addCustomPanGestureRecognizer() {
let panGestureRecognizer = UIPanGestureRecognizer()
panGestureRecognizer.delegate = self
addGestureRecognizer(panGestureRecognizer)
// some additional setup
// ...
}
}
由于自定义手势识别器会干扰滚动,我尝试使用可选要求实现 UIGestureRecognizerDelegate
:
extension UITableView: UIGestureRecognizerDelegate {
func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool {
return otherGestureRecognizer == self.panGestureRecognizer
}
}
...但它根本没有被调用,尽管委托给 tableView(如上所示)。
此外,Xcode 显示警告:
Instance method 'gestureRecognizer(:shouldRecognizeSimultaneouslyWith:)' nearly matches optional requirement 'gestureRecognizer(:shouldRecognizeSimultaneouslyWith:)' of protocol 'UIGestureRecognizerDelegate'
为了消除警告,我尝试在方法定义之前添加 @objc
注释,但没有成功。
事实证明,Xcode 需要一些额外的帮助来找到合适的 Objective-C 方法定义。为此,我必须在 @objc
注释之后提供方法签名:
extension UITableView: UIGestureRecognizerDelegate {
@objc(gestureRecognizer:shouldRecognizeSimultaneouslyWithGestureRecognizer:)
func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool {
return otherGestureRecognizer == self.panGestureRecognizer
}
}
仍然显示警告,但正在正确调用方法。
我想通过添加自定义 UIPanGestureRecognizer
来扩展 UITableView
:
extension UITableView {
func addCustomPanGestureRecognizer() {
let panGestureRecognizer = UIPanGestureRecognizer()
panGestureRecognizer.delegate = self
addGestureRecognizer(panGestureRecognizer)
// some additional setup
// ...
}
}
由于自定义手势识别器会干扰滚动,我尝试使用可选要求实现 UIGestureRecognizerDelegate
:
extension UITableView: UIGestureRecognizerDelegate {
func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool {
return otherGestureRecognizer == self.panGestureRecognizer
}
}
...但它根本没有被调用,尽管委托给 tableView(如上所示)。
此外,Xcode 显示警告:
Instance method 'gestureRecognizer(:shouldRecognizeSimultaneouslyWith:)' nearly matches optional requirement 'gestureRecognizer(:shouldRecognizeSimultaneouslyWith:)' of protocol 'UIGestureRecognizerDelegate'
为了消除警告,我尝试在方法定义之前添加 @objc
注释,但没有成功。
事实证明,Xcode 需要一些额外的帮助来找到合适的 Objective-C 方法定义。为此,我必须在 @objc
注释之后提供方法签名:
extension UITableView: UIGestureRecognizerDelegate {
@objc(gestureRecognizer:shouldRecognizeSimultaneouslyWithGestureRecognizer:)
func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool {
return otherGestureRecognizer == self.panGestureRecognizer
}
}
仍然显示警告,但正在正确调用方法。