2012-09-17 59 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