2013-04-10 5 views
0

Делаю всплывающую подсказку в NSWindow, как следующий Xcode TOOLTIPHooking событий в NSWindow

enter image description here

Если пользователь нажмет кнопку, всплывающее окно отображается. Это просто.

Но после этого, если пользователь нажмет любую кнопку в этом окне, всплывающее окно должно быть скрыто.

Но если пользователь нажмет кнопку, mousedown nswindow: не будет называться. поэтому nswindowcontroller не может принять это событие.

Как nswindow может обнаружить все события в области окна?

+1

Почему бы не использовать Контекстное.? –

+0

Вы имеете в виду + ​​(void) popUpContextMenu: (NSMenu *) menu withEvent: (NSEvent *) событие forView: (NSView *) функция просмотра? –

+0

Это пункт меню, но как его можно использовать в качестве верхней кнопки всплывающего окна? –

ответ

1

Вы можете создать 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"); 
} 
+0

Спасибо. это дает мне хороший намек. –

+0

Большинство приветствуются. **Рад был помочь.* –