默认情况下,Cocoa 将
NSTextFiled
的值绑定到属性仅在文本字段失去输入焦点时才会更新模型。
有没有办法强制更新,例如单击表单按钮而不使用“连续更新值”?
我尝试过什么。
我已经创建了带有 XIB 接口的 Xcode macOS Objective-C 项目。
我已经按以下方式布置了主菜单的表单:
我已向项目添加了以下类:
@interface Person : NSObject
@property (weak) NSString* firstName;
@property (weak) NSString* middleName;
@property (weak) NSString* lastName;
@end
并修改了我的AppDelegeate:
@interface AppDelegate : NSObject <NSApplicationDelegate>
@property (strong) Person* person;
@end
最后,我将表单
NSTextFiled
绑定到 AppDelegate
的 person
的属性,如下所示:
并将保存按钮操作连接到以下方法:
- (IBAction)onSave:(id)sender {
NSLog(@"%@ %@ %@", self.person.firstName, self.person.middleName, self.person.lastName);
}
现在,当我运行应用程序时
,我进入日志了
John Lee (null)
。
这显然意味着,默认情况下,仅当文本字段失去输入焦点时才会更新绑定值。
那么,有没有办法强制 Cocoa 在单击按钮时更新所有表单的绑定值?
“连续更新值”选项很厚,但我将避免在每次敲击键盘时更新模型。
最简单的方法是确保文本字段放弃第一响应者状态,这意味着结束编辑。示例:
- (IBAction)onSave:(id)sender {
[sender.window makeFirstResponder:sender.window]; // <-- this!
NSLog(@"%@ %@ %@", self.person.firstName, self.person.middleName, self.person.lastName);
}