2012-09-17 58 views
0

我使用這個代碼的彈出按鈕添加到NSViewNSPopUpButton不選擇正確

if (popupButton) [popupButton release]; 
popupButton = [[NSPopUpButton alloc] initWithFrame:NSMakeRect(0, 0, SHEET_WIDTH/2, 32) pullsDown:true]; 
NSMenu *menu = [[NSMenu alloc] init]; 
for (NSString *title in anArray) 
    [menu addItemWithTitle:title action:NULL keyEquivalent:@""]; 
[popupButton setMenu:menu]; 
[self addView:popupButton aligned:KOAlignmentCenter]; 

當我啓動我的應用程序,該按鈕沒有選擇。當用戶點擊並選擇其中一個項目時,該按鈕保持空白。例如,如果有3種可能的選擇(ITEM1,ITEM2 &項目3),並在第二個用戶點擊,而不是顯示「ITEM2」這說明不了什麼:

empty selection

回答

4

我不知道爲什麼你沒有看到任何東西,因爲當我嘗試你的代碼時,我確實得到了一個數組中的第一個項目。但是,從列表中選取項目並不會改變顯示內容,這是下拉類型按鈕的預期行爲。從Apple的文檔:

下拉列表通常顯示在彈出的 按鈕旁邊,方法與子菜單顯示在其父項旁邊的方式相同。 與彈出式列表不同,彈出式按鈕的標題顯示下拉列表 不基於當前選定的項目,因此仍然固定爲 ,除非使用單元格的setTitle:方法進行更改。

您也不需要任何一個菜單語句,只需在循環中使用NSPopupButton方法addItemWithTitle:即可。所以試試沒有菜單命令,並使用setTitle:顯式地,如果你還沒有得到任何最初顯示。或者,您可以更改爲彈出式菜單而不是下拉菜單,然後您就沒有設置標題的問題。

這就是我所做的測試:

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification { 

    NSArray *anArray = @[@"One",@"Two",@"Three",@"Four"]; 
    _popupButton = [[NSPopUpButton alloc] initWithFrame:NSMakeRect(100, 200, 200, 32) pullsDown:TRUE]; 
    for (NSString *title in anArray) 
     [_popupButton addItemWithTitle:title]; 
    [self.window.contentView addSubview:_popupButton]; 
} 
+0

我會嘗試這一點,並提出報告(並會挑選最佳的答案,如果它的工作原理)。謝謝你的麻煩! – Fatso

+0

當我使用彈出式按鈕並使用您的代碼時,它可以工作。謝啦! – Fatso

+0

感謝你們,這讓我非常無助地試圖解決爲什麼標題沒有改變!真正令人討厭的是,我幾次瀏覽了NSPopupButton的文檔,並且沒有看到您在任何地方提到的引用。 – Ash