0

我正在 NSWindow 中制作弹出工具提示,例如遵循 XCode 工具提示

在此处输入图像描述

如果用户按下按钮,则会显示弹出窗口。这很容易。

但在那之后,如果用户在这个窗口中按下任何按钮,弹出窗口应该被隐藏。

但是如果用户按下按钮,则不会调用 nswindow 的 mousedown:。因此 nswindowcontroller 无法接收该事件。

nswindow 如何检测窗口区域中的所有事件?

4

1 回答 1

1

您可以为小窗口创建一个 contextMenu,它会在您的操作中打开。

*注意:在图像中,这是一个自定义视图,而不是 contextMenu。*

- (IBAction)button:(id)sender {
    NSRect frame = [(NSButton *)sender frame];
    NSPoint menuOrigin = [[(NSButton *)sender superview] convertPoint:NSMakePoint(frame.origin.x+80, frame.origin.y+frame.size.height-10)
                                                               toView:nil];
    NSEvent *event =  [NSEvent mouseEventWithType:NSLeftMouseDown
                                         location:menuOrigin
                                    modifierFlags:NSLeftMouseDownMask // 0x100
                                        timestamp:0.0
                                     windowNumber:[[(NSButton *)sender window] windowNumber]
                                          context:[[(NSButton *)sender window] graphicsContext]
                                      eventNumber:0
                                       clickCount:1
                                         pressure:1];
    NSMenu *menu = [[NSMenu alloc] init];
    [menu setAutoenablesItems:NO];
    [menu insertItemWithTitle:@"Add Favorite"
                       action:@selector(addFavorite:)
                keyEquivalent:@""
                      atIndex:0];
    [menu insertItem:[NSMenuItem separatorItem] atIndex:1];
    [menu insertItemWithTitle:@"Manage Favorite"
                       action:@selector(manageFavorite:)
                keyEquivalent:@""
                      atIndex:2];
      [NSMenu popUpContextMenu:menu withEvent:event forView:(NSButton *)sender];
}

-(IBAction)addFavorite:(id)sender{
    NSLog(@"add");
}

-(IBAction)manageFavorite:(id)sender{
    NSLog(@"mangage");
}
于 2013-04-10T08:46:16.793 回答