macos – 具有鼠标向下向上和向下向下键的NSButton

macos – 具有鼠标向下向上和向下向下键的NSButton,第1张

概述我需要一个NSButton,它给我2个事件,一个按下按钮(NSOnState),一个按钮被释放(NSOffState),到目前为止我已经使用鼠标(拦截mouseDown:事件).但是使用键盘快捷键不起作用,它会触发一次NSOnState,然后经常延迟一次.是否有任何方法可以获得按下按钮时按下NSOnState并释放NSOffState? 我当前的NSButton子类看起来像这样,不幸的是使用委托: 我需要一个NSbutton,它给我2个事件,一个按下按钮(NSOnState),一个按钮被释放(NSOffState),到目前为止我已经使用鼠标(拦截mouseDown:事件).但是使用键盘快捷键不起作用,它会触发一次NSOnState,然后经常延迟一次.是否有任何方法可以获得按下按钮时按下NSOnState并释放NSOffState?

我当前的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) performKeyEquivalent: (NSEvent *) anEvent{    if ([super performKeyEquivalent: anEvent])    {        [self sendAction: self.action to: self.target];        return YES;    }    return NO;}

如果你确实需要同时使用该事件,我认为你需要使用自定义按钮单元格(通过创建NSbuttonCell的子类并在初始化程序中设置按钮的单元格)并覆盖它的-highlight:withFrame:inVIEw ::

- (voID)highlight:(BOol)flag        withFrame:(NSRect)cellFrame           inVIEw:(NSVIEw *)controlVIEw{    [super highlight: flag withFrame:cellFrame inVIEw:controlVIEw];    if (flag)    {        // Action hasn't been sent yet.    }    else    {        // Action has been sent.    }}
总结

以上是内存溢出为你收集整理的macos – 具有鼠标向下/向上和向下/向下键的NSButton全部内容,希望文章能够帮你解决macos – 具有鼠标向下/向上和向下/向下键的NSButton所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1005507.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-22
下一篇 2022-05-22

发表评论

登录后才能评论

评论列表(0条)

保存