绑定值更改时,NSButton标题不会更新

时间:2015-12-08 14:12:53

标签: swift cocoa binding nsbutton

我想要做的是绑定NSButton的标题,这样我就可以通过更改它所绑定的变量的值来更改按钮的标题。

我创建了默认的swift cocoa app项目,并在窗口中添加了两个按钮。 ButtonA和ButtonB。

对于ButtonB的Value绑定,我已将Title绑定到App Delegate,并将模型键路径设置为self.buttonBTitleBinding。

我已将ButtonA的操作设置为app delegate function button。

我已经定义了app delegate如下:

import Cocoa

@NSApplicationMain
class AppDelegate: NSObject, NSApplicationDelegate
{
    @IBOutlet weak var window: NSWindow!

    var buttonBTitleBinding = "Hello"
    {
        didSet
        {
            NSLog( "buttonBTitleBinding: %@", buttonBTitleBinding )
        }
    }


    @IBAction func buttonA( sender: NSButton )
    {
        if self.buttonBTitleBinding == "Hello"
        {
            self.buttonBTitleBinding = "Bye"
        }
        else
        {
            self.buttonBTitleBinding = "Hello"
        }
    }


    func applicationDidFinishLaunching(aNotification: NSNotification)
    {
        // Insert code here to initialize your application
    }



    func applicationWillTerminate(aNotification: NSNotification)
    {
        // Insert code here to tear down your application
    }
}

当我启动应用程序时,按钮B的标题是" Hello",所以我知道它绑定到正确的变量。

当我按下按钮A时,我确实在控制台中看到了:

buttonBTitleBinding: Bye 
buttonBTitleBinding: Hello
buttonBTitleBinding: Bye 
buttonBTitleBinding: Hello
buttonBTitleBinding: Bye 
buttonBTitleBinding: Hello
buttonBTitleBinding: Bye 
buttonBTitleBinding: Hello

我知道正在调用buttonBtitleBinding的didSet并且它的值正在改变。

但是,按钮的标题不会更新。

有没有办法让这项工作?

1 个答案:

答案 0 :(得分:1)

要使绑定生效,必须以KVO方式更改属性。我是Swift的新手,但我发现了这个:Is key-value observation (KVO) available in Swift?。简而言之:将dynamic modifier添加到属性中。