我正在 NSWindow 中制作弹出工具提示,例如遵循 XCode 工具提示
如果用户按下按钮,则会显示弹出窗口。这很容易。
但在那之后,如果用户在这个窗口中按下任何按钮,弹出窗口应该被隐藏。
但是如果用户按下按钮,则不会调用 nswindow 的 mousedown:。因此 nswindowcontroller 无法接收该事件。
nswindow 如何检测窗口区域中的所有事件?
我正在 NSWindow 中制作弹出工具提示,例如遵循 XCode 工具提示
如果用户按下按钮,则会显示弹出窗口。这很容易。
但在那之后,如果用户在这个窗口中按下任何按钮,弹出窗口应该被隐藏。
但是如果用户按下按钮,则不会调用 nswindow 的 mousedown:。因此 nswindowcontroller 无法接收该事件。
nswindow 如何检测窗口区域中的所有事件?
您可以为小窗口创建一个 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");
}