在区域设置更改上进行禁用的,格式化的NSTextField更新?

时间:2010-03-07 06:49:46

标签: cocoa date formatting localization

我的应用程序中有几个NSTextField用于输入日期和时间。他们附加了NSDateFormatters(使用NSDateFormatterBehavior10_4)。

当我在“系统偏好设置”中更改系统日期格式,然后切换回我的应用程序时,文本字段会自动使用新的日期格式更新,但前提是它们已启用。如果它们被禁用,则在我启用并标记它们之前不会发生任何事情。

即使禁用该字段,如何触发此格式化程序更新?我已经尝试将对象值设置为自身并使用setNeedsDisplay,但都不起作用。

1 个答案:

答案 0 :(得分:0)

我的问题与我用来检测格式更改的特定通知有关。

AppleDatePreferencesChangedNotification被传递时,语言环境没有更新,所以无论我尝试什么,Cocoa都使用旧的语言环境信息更新字段。经过短暂的延迟后,语言环境得到了更新,一切正常。

我认为这就是10.5中添加NSCurrentLocaleDidChangeNotification的原因,但由于我支持回到10.4,我现在将使用此解决方法。

    NSDistributedNotificationCenter *distributedNotificationCenter = [NSDistributedNotificationCenter defaultCenter];
    [distributedNotificationCenter addObserver: self selector: @selector(_dateFormatsChanged:) name: @"AppleDatePreferencesChangedNotification" object: nil];

// ...

- (void)_localeChanged;
{
    // ... update stuff ...
}

- (void)_dateFormatsChanged:(NSNotification *)notification;
{
    // XXX delay while NSLocale updates - can we use another notification instead?
    // XXX 10.5+ has NSCurrentLocaleDidChangeNotification
    [self performSelector: @selector(_localeChanged) withObject: nil afterDelay: 0.1];
}