2012-09-23 101 views
1

我有一個NSButton,單擊它時會打開一個NSPopover,我唯一的問題是,當再次單擊該按鈕時,NSPopover會在另一個之上再次打開,彈出窗口會打開:停止NSPopover多次打開

- (IBAction)openSettingsPopover:(id)sender { 
    NSViewController *controller = [[NSViewController alloc] initWithNibName:@"Settings" bundle:nil]; 
    NSPopover *popover = [[NSPopover alloc] init]; 
    [popover setContentSize:NSMakeSize(288.0f, 170.0f)]; 
    [popover setContentViewController:controller]; 
    [popover setAnimates:YES]; 
    [popover showRelativeToRect:[sender bounds] ofView:sender preferredEdge:NSMaxXEdge]; 
} 

我該如何解僱popover而不是打開另一個,如果用戶在視圖外單擊也是如此?提前致謝。

(left = clicked once, right = clicked multiple times)

回答

3

保持到NSPopover實例的引用,檢查它是否沒有比零打開一個新

- (IBAction)openSettingsPopover:(id)sender { 
    if (self.settingsPopover) { 
     // Close it when clicked again, or simply return 
     [self.settingsPopover close]; 
    } 

    self.settingsPopover = [[NSPopover alloc] init]; 
    ... 
} 
2

更簡單的方法是改變它的行爲之前。 只需將行爲屬性設置爲NSPopOverBehaviourTransient,並且當用戶與不在彈出窗口中的另一個UI元素進行交互時,它將被解除。

[popover setBehaviour:NSPopOverBehaviourTransient]; 
+0

這絕不意味着一個解決方案,因爲OP的問題是他每次調用動作時都會創建_new_ popover。 – Vince