Joa*_*nes 0 objective-c right-click nsmenu nsmenuitem
当在菜单上向右或向左单击时,我使用此代码有两种不同的行为.
单击左键,然后单击右+ cmd.
如何在没有按cmd +单击的情况下以最简单的方式单击鼠标右键?
-(void)awakeFromNib {
NSImage *image = [NSImage imageNamed:@"menubar"];
NSImage *alternateImage = [NSImage imageNamed:@"menubar-white"];
statusItem = [[NSStatusBar systemStatusBar] statusItemWithLength:NSVariableStatusItemLength];
[statusItem setHighlightMode:YES];
[statusItem setImage:image];
[statusItem setAlternateImage:alternateImage];
[statusItem setAction:@selector(show)];
}
- (void)show {
NSLog(@"call show");
NSEvent *event = [NSApp currentEvent];
//Respond to the mouse click
if ([event modifierFlags] & NSCommandKeyMask) //Command
{
NSLog(@"RIGHT");
[statusItem setMenu:statusMenu];
}
else {
NSLog(@"LEFT");
//open window
}
}
Run Code Online (Sandbox Code Playgroud)

谢谢你的帮助!
我不同意亚伦.通常,您应该避免检查瞬时鼠标或键盘状态.它可能在您实际应该响应的动作之后的时间内发生了变化.例如,如果用户左键单击然后释放鼠标按钮,则+pressedMouseButtons可能0在代码到达调用它时返回.
相反,您应该检查触发当前处理的事件.对于左键点击,你会得到一个谁事件type是NSLeftMouseDown.右键单击,您将获得NSRightMouseDown.如果您已经知道某种鼠标单击事件,并且由于某种原因不希望检查其类型,则可以检查其buttonNumber属性.
事实上,什么调用了你的-show方法?我希望你已经在某个地方实现了这个NSResponder方法-mouseDown:.如果是,则对应于左键单击.如果用户右键单击,-rightMouseDown:则会调用另一个方法().因此,如果您想要不同的响应,通常应该以不同的方式编码这两种方法.
| 归档时间: |
|
| 查看次数: |
2025 次 |
| 最近记录: |