我怎么知道哪个事件导致我的IBAction调用?

时间:2012-06-30 11:12:21

标签: objective-c macos cocoa

让我们说我有一个按钮..如果他们都叫我的IBAction,我如何区分单击和双击?有没有办法知道哪个事件导致了呼叫,或者为每种类型的事件设置了不同的动作?

3 个答案:

答案 0 :(得分:3)

编辑:

在Cocoa,afaik中,每个控件都有一种响应的“固定”事件。要管理双击,您应该覆盖方法mouseUpmouseDown,在那里您将获得有关点击次数的信息。

- (void)mouseUp:(NSEvent*)event {
    NSInteger count = [event clickCount];
    <do_something_depending_on:count];
}

老答案:

您可以通过在Interface Builder中显示控件的“操作”选项卡,然后将正确的事件类型连接到控制器操作,来定义与同一控件关联的多个IBAction。看看附图,希望它更清晰。它显示可用于按钮的事件。

enter image description here

答案 1 :(得分:1)

你可以ask the application for what event is currently being processed;点击鼠标,这将包括click count

请注意,即使按钮也可能因鼠标点击以外的原因而触发其操作,例如全键盘访问(对焦按钮并按空格键)或VoiceOver(将VO光标放在按钮上并使用按下操作) ,所以不要假设你的动作是为了响应鼠标而调用的。

答案 2 :(得分:0)

如果我理解你的话,你应该创建两个不同的IBAction,一次点击使用UIControlEventsTouchUpInside,两次点击UIControlEventsTouchDownRepeat(控件中的重复触摸事件;对于这个事件,UITouch tapCount方法的值大于1 。)