ios:如何使UIPickerView(UIView)在UITouchRecognizer之前捕捉触摸事件?
他说:“有时候,你可能希望视图在手势识别器之前接收到触碰”,但我找不到如何做到这一点 我尝试了delaystouchesend=false,但没有任何效果ios:如何使UIPickerView(UIView)在UITouchRecognizer之前捕捉触摸事件?,ios,uiview,uigesturerecognizer,uipickerview,uitapgesturerecognizer,Ios,Uiview,Uigesturerecognizer,Uipickerview,Uitapgesturerecognizer,他说:“有时候,你可能希望视图在手势识别器之前接收到触碰”,但我找不到如何做到这一点 我尝试了delaystouchesend=false,但没有任何效果 @IBOutlet weak var myPickerView: UIPickerView! override func viewDidLoad() { super.viewDidLoad() let tapGesture:UITapGestureRecognizer = UITapGestureRecognizer(ta
@IBOutlet weak var myPickerView: UIPickerView!
override func viewDidLoad() {
super.viewDidLoad()
let tapGesture:UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(MyViewController.pickerViewTapped(_:)))
tapGesture.delegate = self
tapGesture.delaysTouchesEnded = false
myPickerView.addGestureRecognizer(tapGesture)
}
func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int){
// called by UIPickerView
print("pickerView called!")
}
func pickerViewTapped(_ sender: UITapGestureRecognizer) {
// called by UITapGestureRecognizer
print("pickerViewTapped called!")
}
当我点击myPickerView时,控制台将是
pickerViewTapped called!
pickerView called!
但我要的是相反的顺序。怎么做?简短回答: 您不能仅使用UIGestureRecognitor来执行此操作 长答案: 由于将行移动到UIPickerView本身的中心所需的动画,因此在选择UIPickerView的行的操作和调用方法
didSelectRow
之间始终存在延迟
还要注意的是,如果点击中间的行,则不会调用didSelectRow
方法,而只调用pickerviewttapped
这种延迟必然导致执行顺序:
pickerViewTapped
pickerView(pickerView:UIPickerView,
didSelectRow行:Int,不完整组件:Int){
func pickerViewTapped(_ sender: UITapGestureRecognizer) {
// called by UITapGestureRecognizer
let timeDelay = 0.6
//0.6 is arbitrary value, depends on you
DispatchQueue.main.asyncAfter(deadline: .now() + timeDelay) {
print("pickerViewTapped called!")
}
}
我知道也许这不是你想要的答案,我也不知道你为什么会有这样的行为,但这是我找到的最接近的解决办法