2010-03-07 23 views
2

我的应用程序中有几个NSTextFields用于输入日期和时间。他们附有NSDateFormatters(使用NSDateFormatterBehavior10_4)。对区域设置更改进行禁用,格式化的NSTextField更新?

当我改变系统偏好设置系统日期格式,然后再切换回我的应用程序,文本字段与新的日期格式自动更新,但只有当他们被启用。如果他们被禁用,直到我启用并选项卡才会发生任何事情。

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

+0

是否有任何格式化程序使用了两个字段,其中一个已启用,另一个不是?如果是这样,那么每个领域会发生什么? –

+0

不,每个格式化程序都由单个字段使用。如果你想玩它 - http://sabi.net/temp/PesterSL.zip(来源http://github.com/nriley/Pester) - 我在谈论的领域是“在”和“上”。 –

回答

0

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

AppleDatePreferencesChangedNotification交付,该区域还没有更新,所以无论是我的尝试,可可正在更新使用旧的语言环境信息领域。在短暂的延迟后,语言环境更新,一切正常。

我想这就是为什么NSCurrentLocaleDidChangeNotification 10.5加入,但因为我支持回到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]; 
} 
+0

FWIW,因为我现在已经丢弃了pre-10.6的支持,所以NSCurrentLocaleDidChangeNotification可以正常工作,并且(如其名称所暗示的)在区域设置更改完成后发送。请注意,您希望使用NSNotificationCenter,而不是NSDistributedNotificationCenter。 –

相关问题