gpt4 book ai didi

cocoa - 在区域设置更改时进行禁用的格式化 NSTextField 更新?

转载 作者:行者123 更新时间:2023-12-03 16:48:28 24 4
gpt4 key购买 nike

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

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

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

最佳答案

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

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];
}

关于cocoa - 在区域设置更改时进行禁用的格式化 NSTextField 更新?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2395430/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com