gpt4 book ai didi

macos - 使用绑定(bind)和结构时自定义 nspopupbutton 标题

转载 作者:行者123 更新时间:2023-12-03 17:45:54 25 4
gpt4 key购买 nike

如何通过绑定(bind)(使用结构)显示时区标识符?例如而不是 Africa/xxx offset 3600 我只想要 Africa/xxx

class TimezonePopupButton: NSPopUpButton {

private var timezonesController: NSArrayController = NSArrayController()

private var timeZones : [TimeZone] = {
var content : [TimeZone] = []
for identifier in TimeZone.knownTimeZoneIdentifiers {
if let timeZone = TimeZone(identifier: identifier) {
content.append(timeZone)
}
}
return content
}()

override init(frame frameRect: NSRect) {
super.init(frame: frameRect)
commonInit()
}

required init?(coder: NSCoder) {
super.init(coder: coder)
commonInit()
}

func commonInit() {
timezonesController.content = timeZones
bind(.content, to: timezonesController, withKeyPath: "arrangedObjects")
selectItem(withTitle: TimeZone.current.identifier)
}
}

enter image description here

PS:可以用这个 hack 来完成,但它看起来非常不迅速,我担心它将来会崩溃

extension NSTimeZone {

open override func value(forKey key: String) -> Any? {
if key == "description" {
return self.name
}
return super.value(forKey: key)
}
}

最佳答案

绑定(bind)contentValues

An array of strings that are displayed as the items in the NSPopUpButton.

bind(.content, to: timezonesController, withKeyPath: "arrangedObjects")
bind(.contentValues, to: timezonesController, withKeyPath: "arrangedObjects.name")

参见NSPopUpButton Bindings .

关于macos - 使用绑定(bind)和结构时自定义 nspopupbutton 标题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61867780/

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