如何以编程方式替换使用绑定的 NSTextField 中的 "No Selection" 占位符?
How to replace programmatically "No Selection" placeholder in NSTextField that uses binding?
我的应用程序左侧有一个 NSTableView(主),右侧有文本字段(详细信息)
我使用核心数据和绑定来显示记录。
我有一个与 NSObjectController 绑定的文本文件。它是一个日期字段,我在文本字段中添加了 NSDateFormatter。
我的目标:在具有用户系统默认日期格式的文本字段上有一个占位符。我用下面的代码实现了这一点
.h代码:(只贴出相关代码)
@property (weak) IBOutlet NSDateFormatter *offerExpiresOnDateFormatter;
@property (weak) IBOutlet NSTextField *offerExpiresOnDateTextField;
和 .m 代码:
-(void)viewWillAppear {
[_offerExpiresOnDateFormatter setDateStyle:NSDateFormatterShortStyle];
[_offerExpiresOnDateTextField setPlaceholderString:[_offerExpiresOnDateFormatter dateFormat]];
}
这一切都有效。
我的问题:
它仅在应用程序加载时起作用(因为我使用 viewWillAppear)。
占位符以dd/mm/yy格式显示,我的系统默认格式。但是,如果我在 NSTableView 中单击空行,我的占位符就会消失并显示 "No Selection" 占位符。
我该如何防止这种情况发生?
当用户单击 NSTableView 中的空行时,如何显示我的 dd/mm/yy 占位符?
我不能只在绑定检查器下的 NSTextField 无选择占位符中键入 dd/mm/yy,因为我不知道用户将拥有什么作为系统默认值。
不要绑定 XIB 中的值,使用选项手动绑定它。
[self.offerExpiresOnDateTextField bind:NSValueBinding
toObject:self.objectController
withKeyPath:@"selection.date"
options:@{NSNoSelectionPlaceholderBindingOption:
self.offerExpiresOnDateFormatter.dateFormat}];
我的应用程序左侧有一个 NSTableView(主),右侧有文本字段(详细信息)
我使用核心数据和绑定来显示记录。
我有一个与 NSObjectController 绑定的文本文件。它是一个日期字段,我在文本字段中添加了 NSDateFormatter。
我的目标:在具有用户系统默认日期格式的文本字段上有一个占位符。我用下面的代码实现了这一点
.h代码:(只贴出相关代码)
@property (weak) IBOutlet NSDateFormatter *offerExpiresOnDateFormatter;
@property (weak) IBOutlet NSTextField *offerExpiresOnDateTextField;
和 .m 代码:
-(void)viewWillAppear {
[_offerExpiresOnDateFormatter setDateStyle:NSDateFormatterShortStyle];
[_offerExpiresOnDateTextField setPlaceholderString:[_offerExpiresOnDateFormatter dateFormat]];
}
这一切都有效。
我的问题:
它仅在应用程序加载时起作用(因为我使用 viewWillAppear)。
占位符以dd/mm/yy格式显示,我的系统默认格式。但是,如果我在 NSTableView 中单击空行,我的占位符就会消失并显示 "No Selection" 占位符。
我该如何防止这种情况发生?
当用户单击 NSTableView 中的空行时,如何显示我的 dd/mm/yy 占位符?
我不能只在绑定检查器下的 NSTextField 无选择占位符中键入 dd/mm/yy,因为我不知道用户将拥有什么作为系统默认值。
不要绑定 XIB 中的值,使用选项手动绑定它。
[self.offerExpiresOnDateTextField bind:NSValueBinding
toObject:self.objectController
withKeyPath:@"selection.date"
options:@{NSNoSelectionPlaceholderBindingOption:
self.offerExpiresOnDateFormatter.dateFormat}];