2015-11-06 59 views
0

这是一个简单的问题, 我有一个UIButton与目标的行动如何触发UIButton的目标事件之前父TapGestureRecognizer

addTarget(self, action: "buttonPressed", forControlEvents: UIControlEvents.TouchUpInside) 
func buttonPressed() 
{ 
    self.selected = !self.selected 
} 

此按钮是一个父UIView

containerView.addSubview(button) 

我的孩子将UITapGestureRecognizer添加到容器中

let tapG = UITapGestureRecognizer(target: self, action: "toggleView:") 
containerView.addGestureRecognizer(tapG) 

in func toggleView(gest:UIGestureRecognizer)我检查我的按钮状态。

问题是,在toggleView(),按钮的状态尚未设置... 仍然!

编辑

,如果我做

print(button.selected) 

我只得到了按钮值的触摸事件,而不是新的了。

有什么想法吗?

+0

我找到了一种通过将按钮控件事件更改为TouchDown而不是TouchUp来“解决”问题的方法。这样,Button触发器在GestureRecognizer – Mikael

回答

0

尝试改变

func toggleView(gest:UIGestureRecognizer) 

func toggleView(gest:UITapGestureRecognizer) 

希望它能帮助!

+0

的结尾之前被调用,但它不起作用。如果你想改变你的GestureRecognizer类型,我只是使用超类作为参数,更容易管理代码 – Mikael

0

我不完全得到你所要完成的,如果你要执行按钮点击某些动作和另一个动作时containerView外面挖那么你可以做

-(void)toggleView:(UITapGestureRecognizer *) gest{ 
    CGPoint tapLocation = [gest loactionInView:containerView]; 
    if(CGRectContainsPoint(button.frame, tapLocation)){ 
     // Tapped on Button 
     } 
    else{ 
     // tapped outside in containerView 
     } 
} 

注意什么:由于上午没有快速学习,我在Objective-C中给出了片段。你应该能够很容易地将它翻译成swift :)

+0

我希望按钮TouchUpInside在其父视图上的tapGestureRecognizer之前被触发。 – Mikael

+0

我认为它与FirstResponder有关,但我不太清楚如何使其工作 – Mikael

相关问题