如何将NSMenuItem(已启用)的状态绑定到NSNumber的特定值?

时间:2011-11-30 11:28:00

标签: objective-c cocoa

如何将NSMenuItem(已启用)的状态绑定到NSNumber的特定值?

  

如果myNumber == 2则应启用我的NSMenuItem

我需要为几个NSMenuItem执行此操作:

即。

  

如果myNumber = 3则应启用我的第二个NSMenuItem

感谢

3 个答案:

答案 0 :(得分:0)

使用IBOutletNSButton并禁用界面构建器中的所有按钮。然后使用If else条件并启用您的按钮。

IBOutlet NSButton *my1;// Disable  
IBOutlet NSButton *my2; //Disable   
If(myNumber ==1)
 [my1 setState:NSOnState];
else If(myNumber ==2)
 [my1 setState:NSOnState];

答案 1 :(得分:0)

我发现ValueTransformer太麻烦了。它比这简单得多。只需创建如下的控制器对象

class FooMenuController: NSObject {

    @IBAction func selectedNumberChanged(sender: NSMenuItem) {
        UserDefaults.fooNumber = sender.tag
    }
}

extension FooMenuController: NSMenuItemValidation {

    func validateMenuItem(_ menuItem: NSMenuItem) -> Bool {
        let on = (menuItem.tag == UserDefaults.fooNumber)
        menuItem.state = on ? .on : .off
        return true
    }
}

在您的MainMenu.xib中,从库中拖出一个NSObject实例,并将其设置为您的FooMenuController子类。现在,将每个action上的NSMenuItem设置为FooMenuController.selectedNumberChanged,并将其tag的值设置为其应表示的数字。

Voila。

答案 2 :(得分:-1)

你可以在IB

中绑定它的(NSButton)“值”