Cocoa MacOS Swift/Objective-C中有bug的NSpoupButton不允许用户选择第一项
如果我们试图在swift/objective-c中创建一个NSPOUPPBUTON,我们会发现,如果我们不将pullsdown设置为false,那么一旦选择了除第一个项目之外的其他项目,您将永远无法选择回第一个项目Cocoa MacOS Swift/Objective-C中有bug的NSpoupButton不允许用户选择第一项,swift,cocoa,nspopupbutton,Swift,Cocoa,Nspopupbutton,如果我们试图在swift/objective-c中创建一个NSPOUPPBUTON,我们会发现,如果我们不将pullsdown设置为false,那么一旦选择了除第一个项目之外的其他项目,您将永远无法选择回第一个项目 class PopupButton: NSPopUpButton { let items = ["item 1", "item 2", "item 3"] override init(frame buttonFrame: NSRect, pullsDown fla
class PopupButton: NSPopUpButton {
let items = ["item 1", "item 2", "item 3"]
override init(frame buttonFrame: NSRect, pullsDown flag: Bool) {
super.init(frame: buttonFrame, pullsDown: flag)
items.forEach { item in
menu?.addItem(withTitle: item, action: #selector(handleSelectedItem(_:)), keyEquivalent: "")
}
}
@objc private func handleSelectedItem(_ selectedItem: NSMenuItem) {
title = selectedItem.title
}
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
有没有办法解决这个问题?
注意:我不希望答案说将pullsDown设置为false,问题已经解决。我需要保持弹出按钮的行为符合预期。从,这是下拉按钮的工作方式。它更像是一个菜单-标题不基于选择,只有当您显式设置它时,标题才会更改。列表实际上从索引1开始-索引0可用于存储标题,但您仍应设置它,这就是为什么列表中的第一项未在菜单中使用的原因。如果开发人员添加项目时索引从1开始,则应在1而不是0处添加第一项。您需要向Apple了解这一点,这是他们写的方式。我通常只是将第一个数组项设置为标题,然后从那里添加菜单项。如果我需要更改标题,我可以使用选择重置下拉列表的标题,或者使用弹出按钮。请参阅。如果需要提供非命令的互斥选项列表,请使用弹出按钮。