我的应用程序中有几个NSTextField用于输入日期和时间。他们附加了NSDateFormatters(使用NSDateFormatterBehavior10_4)。
当我在“系统偏好设置”中更改系统日期格式,然后切换回我的应用程序时,文本字段会自动使用新的日期格式更新,但前提是它们已启用。如果它们被禁用,则在我启用并标记它们之前不会发生任何事情。
即使禁用该字段,如何触发此格式化程序更新?我已经尝试将对象值设置为自身并使用setNeedsDisplay,但都不起作用。
答案 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];
}