如何在NSTextField中使用绑定以编程方式替换“No Selection”占位符?

时间:2016-02-23 01:18:47

标签: objective-c cocoa nsdate nsdateformatter nstextfield

我的应用左侧有一个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中的空行,我的占位符将消失,并显示“无选择”占位符。

我该怎样防止这种情况?

当用户点击NSTableView中的空行时,如何显示我的dd / mm / yy占位符?

我不能只在绑定检查器下的NSTextField No Selection占位符中键入dd / mm / yy,因为我不知道用户将拥有什么作为系统默认值。

1 个答案:

答案 0 :(得分:1)

不要绑定XIB中的值,使用选项手动绑定它。

[self.offerExpiresOnDateTextField bind:NSValueBinding
    toObject:self.objectController
    withKeyPath:@"selection.date"
    options:@{NSNoSelectionPlaceholderBindingOption:
        self.offerExpiresOnDateFormatter.dateFormat}];