【问题标题】:How to trigger UIButton target event before parent TapGestureRecognizer如何在父 TapGestureRecognizer 之前触发 UIButton 目标事件
【发布时间】:2015-11-06 06:49:53
【问题描述】:

这是一个简单的问题, 我有一个带有目标操作的UIButton

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)

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

问题是在toggleView()中,按钮的状态还没有设置……YET!

编辑

如果我这样做

print(button.selected)

我只在触摸事件之前获得按钮值,而不是新的。

有什么想法吗?

【问题讨论】:

  • 我找到了一种“解决”问题的方法,方法是将按钮控制事件更改为 TouchDown 而不是 TouchUp。这样,在 GestureRecognizer 结束之前调用 Button 触发器

标签: ios swift events uibutton touch


【解决方案1】:

尝试改变

func toggleView(gest:UIGestureRecognizer)

func toggleView(gest:UITapGestureRecognizer)

希望对你有帮助!

【讨论】:

  • 谢谢,但没有帮助。我只是使用超类作为参数,如果你想改变你的 GestureRecognizer 类型更容易管理代码
【解决方案2】:

我不完全明白你想要完成什么,如果你想在按钮单击时执行某些操作,而在 containerView 中点击外部时执行另一个操作,那么你可以这样做

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

注意:由于我没有学 swift,所以我在 Objective-C 中给出了 sn-p。您应该能够轻松地将其翻译成 swift :)

【讨论】:

  • 我希望在其父视图上的 tapGestureRecognizer 之前触发按钮 TouchUpInside。
  • 我认为它与 FirstResponder 有关,但我不太清楚如何使其工作
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-08-15
  • 1970-01-01
  • 2017-11-18
  • 1970-01-01
  • 1970-01-01
  • 2011-02-18
  • 2014-11-16
相关资源
最近更新 更多