我正在NSWindow制作弹出工具提示,就像关注XCode工具提示
如果用户按下按钮,则会显示弹出窗口。这很容易。
但在此之后,如果用户按下此窗口中的任何按钮,则应隐藏弹出窗口。
但是如果用户按下按钮,则不会调用nswindow的mousedown :.因此nswindowcontroller无法接收该事件。
nswindow如何检测窗口区域中的所有事件?
答案 0 :(得分: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");
}