对Mac应用程序编程很新,我遇到了问题。在我的NSComboBox上,当重新打开下拉列表时,它们不会突出显示当前选定的项目。我可能只是失明或者默认的高亮颜色是透明的。我只是不知道。请参阅下面的图片,了解我的目标。
此时我编写的代码非常少,一切都在我的故事板上完成。只是有点困惑为什么它没有做一些应该非常简单的事情。猜猜我在iOS领域花了太多时间。
所以决定将整个项目重新创建为一个单独的样本NSCombobox,以证明在运行Xcode 9.2时这对我来说很简单。
我连接的唯一插座是NSComboBox的委托和数据源。并且在NSComboBox上更改的唯一设置是启用数据源,并更改行为toe Selectable。运行此组合的代码非常简单:
import Cocoa
class ViewController: NSViewController, NSComboBoxDelegate, NSComboBoxDataSource {
@IBOutlet weak var combo: NSComboBox!
var dataSource: [String] = ["Off"]
override func viewDidLoad() {
super.viewDidLoad()
for index in 1...512 {
dataSource.append("\(index)")
}
combo.reloadData()
combo.selectItem(at: 0)
}
func comboBox(_ comboBox: NSComboBox, objectValueForItemAt index: Int) -> Any? {
return dataSource[index]
}
func numberOfItems(in comboBox: NSComboBox) -> Int {
return dataSource.count
}
}
根据此处的Apple文档,下拉列表应显示所选项目:Apple NSComboBox Docs
答案 0 :(得分:3)
列表会打开您离开的位置。实施NSComboBoxDataSource
方法
optional func comboBox(_ comboBox: NSComboBox, indexOfItemWithStringValue string: String) -> Int
让组合框知道要选择哪一行。
返回值
与指定字符串匹配的项的索引,如果没有项匹配,则为NSNotFound。
讨论
NSComboBox对象使用此方法将弹出列表的选定项与文本字段的内容同步。如果您没有实现此方法,接收器不会将弹出列表的选定项与文本字段的内容同步。