覆盖touchesBegan

时间:2015-05-27 23:36:19

标签: ios xcode swift uibutton

我目前正在使用swift开发iOS应用。我用override来编写自己的tocuhesBegan和tochesEnded函数。现在我使用self.button。

QuotesView

它不会转到我在选择器中指定的函数。是否有其他人有这个问题,或者有人知道发生了什么事吗?

这是我在遇到问题时使用的代码。它是UIButton的子类。

2 个答案:

答案 0 :(得分:3)

如果覆盖任何触摸方法,则应该覆盖所有四个调用super。

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
    [super touchesBegan:touches withEvent:event];
    //your code
}
-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event{
    [super touchesEnded:touches withEvent:event];
    //your code
}
-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event{
    [super touchesMoved:touches withEvent:event];
    //your code
}
-(void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event{
    [super touchesCancelled:touches withEvent:event];
    //your code
}

答案 1 :(得分:0)

您的视图和按钮可能有两个不同的手柄,以证明尝试触摸屏幕中的任何其他位置并检测到您的触摸,但是按下按钮时触摸处理并且永远不会传递给其他处理程序。您必须选择,拦截所有消息并处理是否应该在您执行所需操作之前/之后传递原始句柄,或者实现按钮处理程序并使其在链中传递消息:

From the apple documentation:

  

覆盖命中测试可确保超级视图接收所有触摸   因为,通过将自己设置为命中测试视图,超级视图   截取并接收通常传递给的触摸   先查看子视图。如果superview不覆盖hitTest:withEvent:,   触摸事件首先与子视图相关联   发生了,从未发送到超级视图。