7

我使用以下代码以编程方式创建了我的 NSPopUpButton

[myPopUpButton insertItemWithTitle:@"--Select one--" atIndex:0];
[myPopUpButton addItemsWithTitles:[NSArray arrayWithObjects:@"1.One",@"Two",@"Three", nil]];

[myPopUpButton sizeToFit];
[myPopUpButton  setAction:@selector(popUpAction:)];
[fullBrowserView addSubview: myPopUpButton];

//PopUp Action
-(void)popUpAction:(id)sender
{
    NSLog(@"popUpAction");
}

当我单击 popUpButton 时,popUpButton 的菜单项被禁用。当我使用 interfacebuilder 时,它与 IBAction 一起工作正常。

为什么这个 setAction 不适用于 NSPopUpButton?

4

2 回答 2

13

看起来您没有设置目标对象来发送消息。因此,在代码中,添加:

[myPopUpButton setTarget:self];

假设该popUpAction:方法在同一个类中。

当您使用 Interface Builder 时,它会将选择器操作连接到目标。

从此调用的文档中:

- (void)setTarget:(id)anObject

如果 anObject 是nil,但控件仍然分配有有效的操作消息,则应用程序将跟随响应者链寻找可以响应消息的对象。

在您的情况下,没有对象响应消息。

于 2012-03-07T11:42:44.070 回答
6

即使 myPopUpButton 具有目标和操作,您可能还需要添加:

[myPopUpButton setAutoenablesItems:NO];

否则,每次单击按钮时,它都会自动禁用其菜单上的所有项目。(我意识到这个问题很老,但发布这个解决方案以防它帮助其他人)。

于 2016-07-07T19:46:28.670 回答