背景是:
主的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)了。
转载请注明:在路上 » [已解决]Swift中的UIGestureRecognizer中无法避免UIButton触发点击事件