2012-12-27 75 views
4

我現在有針對在awakeFromNib這樣初始化的狀態欄的NSStatusItem實施NSPopover上NSStatusItem

statusItem = [[NSStatusBar systemStatusBar] statusItemWithLength:NSVariableStatusItemLength]; 
    [statusItem setMenu:statusMenu]; 
    [statusItem setImage:statusImage]; 
    [statusItem setAlternateImage:statusHighlightedImage]; 
    [statusItem setHighlightMode:YES]; 
    [statusItem setTarget:self]; 

我有一個NSMenu點擊圖標時打開。其中一個選項被點擊後,應該從狀態欄圖標打開NSPopover。要做到這一點,我有這樣的代碼,它通過接口生成器連接到菜單項:

- (IBAction)prefs:(id)sender {  
    NSRectEdge prefEdge = NSMaxYEdge; 

    [[self pop] showRelativeToRect:[[statusItem view] bounds] 
          ofView:[statusItem view] 
        preferredEdge:prefEdge]; 
} 

然而,當我單擊要打開酥料餅的菜單項,沒有任何反應。有什麼特別的原因可能會導致這種情況?據我所知,應該可以做到。

在此先感謝。我通過堆棧溢出來查看最好的,但如果有一個真正重複的問題,請把我連接到它。

供參考:該statusItem變量是NSStatusItem

+0

您應該添加的代碼爲'NSMenu' – NSAddict

+0

那是'-prefs:'方法獲取調用? '[self pop]'和'[statusItem view]'是否爲非零? – paulmelnikow

+0

@noa是對的,嘗試記錄一些內容,並檢查'self.pop'是否返回'nil'。 – NSAddict

回答

2

您需要自己設置一個視圖,使用[statusItem setView:][statusItem view]返回非nil

如果您不介意使用私有API,則可以嘗試撥打[statusItem _button],但是如果您計劃提交給App Store,則不允許這樣做。

+0

我試着用_button來查看它是否可以工作,但它沒有。除非我犯了一個簡單的錯誤,否則設置視圖似乎不起作用。它只是覆蓋狀態項的當前視圖(所以它從菜單欄中消失)。 – Josh

+0

是的,就是這樣。 – Wevah

+0

嗯。不知道爲什麼這不起作用,即使我創建一個新的視圖。 – Josh