Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.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
Macos 使用鼠标向下/向上和向下/向上键按下按钮_Macos_Cocoa_Nsbutton - Fatal编程技术网

Macos 使用鼠标向下/向上和向下/向上键按下按钮

Macos 使用鼠标向下/向上和向下/向上键按下按钮,macos,cocoa,nsbutton,Macos,Cocoa,Nsbutton,我需要一个NSButton,它给我2个事件,一个是按下按钮时(NSOnState),另一个是释放按钮时(NSOffState),到目前为止,我已经让它与鼠标一起工作(拦截mouseDown:event)。但是使用键盘快捷键是不起作用的,它会触发一次状态,然后在延迟之后,通常会触发一次状态。有没有办法得到一个按钮,按下时触发NSOnState,释放时触发NSOFSTATE 我当前的NSButton子类如下所示,不幸的是,它使用委托工作: -(void)awakeFromNib { [sel

我需要一个NSButton,它给我2个事件,一个是按下按钮时(NSOnState),另一个是释放按钮时(NSOffState),到目前为止,我已经让它与鼠标一起工作(拦截mouseDown:event)。但是使用键盘快捷键是不起作用的,它会触发一次状态,然后在延迟之后,通常会触发一次状态。有没有办法得到一个按钮,按下时触发NSOnState,释放时触发NSOFSTATE

我当前的NSButton子类如下所示,不幸的是,它使用委托工作:

-(void)awakeFromNib {
    [self setTarget:self];
    [self setAction:@selector(buttonAction:)];
}

-(void)mouseDown:(NSEvent *)theEvent {
    [_delegate button:self isPressed:YES];
    [super mouseDown:theEvent];
}

-(void)buttonAction:(id)sender {
    [_delegate button:self isPressed:NO];
}

通过使用
-sendActionOn:
,可以将该按钮设置为在两个时间发送鼠标事件:


[self.button sendActionOn:NSLeftMouseDownMask | NSLeftMouseUpMask];
处理键盘事件似乎同样更加困难。如果您不需要在从按钮上删除突出显示的同时完全使用事件,您可以覆盖NSButton的
-performKeyEquivalent:
,以便它发送两次操作

-(BOOL)性能等效:(NSEvent*)事件
{
if([super performKeyEquivalent:anEvent])
{
[self sendAction:self.action to:self.target];
返回YES;
}
返回否;
}
如果您确实同时需要该事件,我认为您需要使用自定义按钮单元格(通过创建NSButtonCell的子类并在初始值设定项中设置按钮的单元格)并覆盖其
-highlight:withFrame:inView:

-(void)突出显示:(BOOL)标志
withFrame:(NSRect)单元框架
查看:(NSView*)控制视图
{
[超级高亮显示:带边框的标志:视图中的cellFrame:controlView];
国际单项体育联合会(旗)
{
//行动还没有发出。
}
其他的
{
//行动已经发出。
}
}

你到底想用这个按钮做什么?你确定按钮是它的全部所在地吗?也许不是一种方法?[self.button sendActionOn:NSLeftMouseDownMask | NSLeftMouseUpMask];我无法用swift编写它(我现在有self.sendAction(在:.leftMouseDown上))。我尝试了.leftMouseUp.union(等),但出现错误(self.sendAction(on:.leftMouseDown |.leftMouseUp)导致:协议“BinaryInteger”要求“NSEvent.EventTypeMask”符合“BinaryInteger”)。它的快速版本是什么?如果我猜对了,这是否意味着按钮操作将触发两次:在mouseDown上和在mouseUp上?感谢您的帮助(不像在objC中那么简单):让maskUp=NSEvent.EventTypeMask.leftMouseUp.rawValue让maskDown=NSEvent.EventTypeMask.leftMouseDown.rawValue让mask=Int(maskUp | maskDown)//从UInt self.sendAction强制转换(在:NSEvent.EventTypeMask(rawValue:NSEvent.EventTypeMask.rawValue(mask))上)