2011-11-15 63 views
8

我想從我的工具欄中的NSToolbarItem按鈕顯示NSPopover
(即,位於按鈕下方)。從NSToolbarItem按鈕顯示NSPopover

理想情況下,我想將按鈕的NSView傳遞給彈出窗口來定位它。
我的問題是,我如何獲得NSToolbarItemNSView

[toolbarbutton view]總是返回零。

回答

2

您可以直接從NSToolbarItem中包含的NSButton(這是您通常應該做的事情,考慮分段控件,其中每個段都有其自己的目標/操作)直接發送操作,並且這樣做可以實現。

+0

謝謝 - 我會試試看。 –

2

非但沒有從IBAction爲發送方的看法,直接連接一個IBOutlet到工具欄項目上,並用它來獲得相對的觀點:

在你的頭文件:

@property (weak) IBOutlet NSToolbarItem *theToolbarItem; 
@property (weak) IBOutlet NSPopover *thePopover; 

在您的實現文件,以顯示彈出窗口:

[self.thePopover showRelativeToRect:[[self.theToolbarItem view] bounds] ofView:[self.theToolbarItem view] preferredEdge:NSMinYEdge]; 

這也適用於從工具欄項目內的菜單項選擇中顯示彈出窗口。

0

雖然我沒有做到這一點的酥料餅的使用斯圖爾特Tevendale提到的方法顯示,我確實遇到問題時,我嘗試使用NSToolbarDelegate驗證(啓用/禁用)的NSToolbarItems

-(BOOL)validateToolbarItem:(NSToolbarItem *)toolbarItem { 
    BOOL enable = YES; 

    NSString *identifier = [toolbarItem itemIdentifier]; 

    // This does never get called because I am using a button inside a custom `NSToolbarItem` 
    if ([identifier isEqualToString:@"Popover"]) { 
     return [self someValidationMechanism]; 
    } 

    // For this the validation works when I am using a standard `NSToolbarItem` 
    else if ([identifier isEqualToString:@"StandardToolbarItem"]){ 
     return [self someOtherValidationMechanism]; 
    } 

    return enable; 
} 

所以我建議不要在NSToolbarItem中顯示Popover。另一種方法可能是顯示頁碼錶:How to show a NSPanel as a sheet