【问题标题】:SetAction for NSPopUpButton is disabling my popUpButtonNSPopUpButton 的 SetAction 正在禁用我的 popUpButton
【发布时间】:2016-07-08 03:46:28
【问题描述】:

我使用以下代码以编程方式创建了我的 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?

【问题讨论】:

    标签: macos cocoa nspopupbutton


    【解决方案1】:

    看起来您没有设置要向其发送消息的 target 对象。所以,在代码中,添加:

    [myPopUpButton setTarget:self];
    

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

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

    来自此调用的文档:

    - (void)setTarget:(id)anObject

    如果一个对象是nil,但控件仍然分配了一个有效的动作消息,应用程序会跟随响应者链寻找可以响应消息的对象。

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

    【讨论】:

      【解决方案2】:

      即使 myPopUpButton 有目标和动作,您也可能需要添加:

      [myPopUpButton setAutoenablesItems:NO];
      

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-04-07
        • 2011-10-14
        相关资源
        最近更新 更多