绑定值更改时 NSButton 标题不更新
NSButton Title not updating when bound value changes
我想做的是绑定一个 NSButton 的标题,这样我就可以通过更改它绑定到的变量的值来更改按钮的标题。
我已经创建了默认的 swift cocoa 应用程序项目并向 window 添加了两个按钮。按钮 A 和按钮 B。
对于 ButtonB 的值绑定,我已将标题绑定到 App Delegate,并将模型键路径设置为 self.buttonBTitleBinding。
我已经将 ButtonA 的动作设置为应用委托函数 buttonA。
我已将应用程序委托定义如下:
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 并且它的值正在改变。
但是,按钮的标题不会更新。
有没有办法让它工作?
要使绑定生效,属性 必须以 KVO 方式进行更改。我是 Swift 的新手,但我发现了这个:Is key-value observation (KVO) available in Swift?。简而言之:将 dynamic modifier
添加到 属性。
我想做的是绑定一个 NSButton 的标题,这样我就可以通过更改它绑定到的变量的值来更改按钮的标题。
我已经创建了默认的 swift cocoa 应用程序项目并向 window 添加了两个按钮。按钮 A 和按钮 B。
对于 ButtonB 的值绑定,我已将标题绑定到 App Delegate,并将模型键路径设置为 self.buttonBTitleBinding。
我已经将 ButtonA 的动作设置为应用委托函数 buttonA。
我已将应用程序委托定义如下:
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 并且它的值正在改变。
但是,按钮的标题不会更新。
有没有办法让它工作?
要使绑定生效,属性 必须以 KVO 方式进行更改。我是 Swift 的新手,但我发现了这个:Is key-value observation (KVO) available in Swift?。简而言之:将 dynamic modifier
添加到 属性。