Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 为非子类NSButton分配单点和双击事件[如果重复,回答此问题]_Objective C_Macos_Cocoa_Nsbutton - Fatal编程技术网

Objective c 为非子类NSButton分配单点和双击事件[如果重复,回答此问题]

Objective c 为非子类NSButton分配单点和双击事件[如果重复,回答此问题],objective-c,macos,cocoa,nsbutton,Objective C,Macos,Cocoa,Nsbutton,如何在cocoa中为具有两个单独功能的NSButton分配单点和双击事件(无需对按钮进行子类化)应用程序可以为给定选择器提供一个NSEvent。因此,只需修改您希望添加双击逻辑的方法以支持该事件,并使用其clickCount属性响应任意数量的连续单击,如下所示: - (void)someMethod:(id)sender { NSEvent *event = [NSApp currentEvent]; switch (event.clickCount) { cas

如何在cocoa中为具有两个单独功能的NSButton分配单点和双击事件(无需对按钮进行子类化)

应用程序可以为给定选择器提供一个
NSEvent
。因此,只需修改您希望添加双击逻辑的方法以支持该事件,并使用其
clickCount
属性响应任意数量的连续单击,如下所示:

- (void)someMethod:(id)sender {
    NSEvent *event = [NSApp currentEvent];
    switch (event.clickCount) {
        case 1:
            //Handle a single click
            break;
        case 2:
            //Handle a double click
            break;
        default:
            break;
    }
}
看看class.Override
-(void)mouseUp:(NSEvent*)事件
方法

mouseUp:通知接收者用户已释放左键 鼠标按钮


下面将解决您的问题

@property (strong) IBOutlet NSButton *myButton;
然后,稍后将双重操作设置为您的按钮

[[self.myButton cell] setDoubleAction:@selector(showMsg:)];
[[self.myButton cell] setTarget:self];

不,不,不。我是说使用该方法的主体来解决多次鼠标单击的问题,但是更改按钮发送的操作以添加NSEvent参数。无需子类化。我们是否使用
-(iAction)方法:(NSEvent*)事件来代替
-(iAction)方法:(id)发送方?
?这里,我已经回答了。希望它比我的评论更清楚。引发错误:
-[NSButton clickCount]:无法识别的选择器发送到实例0x100411d00
您确定已正确分配操作吗?我在示例代码中使用了iAction而不是void是的。但是另一个问题。。。如果双击,则返回single click和doubleclick eventsHm,我很担心这一点。您可能需要付出艰苦的努力,使用NSTimer来管理某些单击间隔并对其作出响应。有没有不进行子类化的方法?NSButtonCell没有setDoubleAction:
[[self.myButton cell] setDoubleAction:@selector(showMsg:)];
[[self.myButton cell] setTarget:self];