我想要做的是绑定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并且它的值正在改变。
但是,按钮的标题不会更新。
有没有办法让这项工作?
答案 0 :(得分:1)
要使绑定生效,必须以KVO方式更改属性。我是Swift的新手,但我发现了这个:Is key-value observation (KVO) available in Swift?。简而言之:将dynamic modifier
添加到属性中。