Cocoa MacOS Swift/Objective-C中有bug的NSpoupButton不允许用户选择第一项

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

如果我们试图在swift/objective-c中创建一个NSPOUPPBUTON,我们会发现,如果我们不将pullsdown设置为false,那么一旦选择了除第一个项目之外的其他项目,您将永远无法选择回第一个项目

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了解这一点,这是他们写的方式。我通常只是将第一个数组项设置为标题,然后从那里添加菜单项。如果我需要更改标题,我可以使用选择重置下拉列表的标题,或者使用弹出按钮。请参阅。如果需要提供非命令的互斥选项列表,请使用弹出按钮。