[已解决]Swift中的UIGestureRecognizer中无法避免UIButton触发点击事件

背景是:
主的view中已经实现了UIGestureRecognizer
然后在:
UIGestureRecognizerDelegate
中的:
    func gestureRecognizer(gestureRecognizer: UIGestureRecognizer, shouldReceiveTouch touch: UITouch) -> Bool {
已经通过:
CGRectContainsPoint(searchButton.frame, touchPoint)
判断到:
点击到是一个button了:
        let searchImage = UIImage(named:"search_24x24.png")
        let searchFrame = CGRectMake(
            addButton.frame.origin.x - 44,
            0,
            44.0,
            NAVI_BAR_HEIGHT)
        searchButton = UIButton()
        searchButton.frame = searchFrame
        searchButton.addTarget(self, action:"jumpToSearch:", forControlEvents:UIControlEvents.TouchUpInside)
        searchButton.setImage(searchImage,forState:UIControlState.Normal)
        tabbgView.addSubview(searchButton)

    //jump to search view
    func jumpToSearch(button : UIButton){
        print("jumpToSearch")
    }
但是:
不论shouldReceiveTouch中返回是true还是false,结果UIButton的action都会被调用。。。
搜:
swift UIGestureRecognizer UIButton
参考:
后来看到官网中的:
说是:
iOS 6之后,默认的控件的动作,会覆盖掉tap的手势
比如:
button的话,支持单击tap
如果父视图有个手势识别器,结果用户单击tap的话,是按钮,而不是手势识别器,收到对应的tap。
类似的其它控件还有:
  • A single finger single tap on a UIButton, UISwitch, UIStepper, UISegmentedControl, and UIPageControl.
  • A single finger swipe on the knob of a UISlider, in a direction parallel to the slider.
  • A single finger pan gesture on the knob of a UISwitch, in a direction parallel to the switch.
最后,找了个,workaround,临时的,规避的办法解决此问题的:
在此处,点击加号,显示出下拉列表的时候,
(同时会给当前parent view添加tapRecognizer的)
主动去把那个button去disable
    //toggle add drop down list
    func toggleAddDropdownList(){
        addDropdownListView.hidden = !addDropdownListView.hidden

        if !addDropdownListView.hidden {
            self.view.addGestureRecognizer(tapRecognizer)
            searchButton.enabled = false
        }else {
            self.view.removeGestureRecognizer(tapRecognizer)
            searchButton.enabled = true
        }

        //overlayView.hidden = addDropdownListView.hidden

        print("addDropdownListView.hidden=\(addDropdownListView.hidden)")
    }
-》这样,即使在
shouldReceiveTouch
中,返回了啥,结果都无法去调用,此时已经被disable的button(的action)了。


发表评论

电子邮件地址不会被公开。 必填项已用*标注

无觅相关文章插件,快速提升流量