如果我们试图在swift/objective-c中创建一个NSPopupButton
,我们会发现如果我们不将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并且问题已修复。我需要保持弹出按钮的行为符合预期。)
最佳答案
从Documentation archive,这就是下拉按钮的工作方式。它更像一个菜单-标题不是基于所选内容,只有当您显式设置标题时,标题才会更改。列表实际上从索引1开始-索引0可用于存储标题(尽管您仍应设置它),这就是为什么列表中的第一个项未在菜单中使用的原因。