NSComboBox 未在下拉列表中显示当前选定的值

Bin*_*pus 2 cocoa swift

对 Mac 应用程序编程非常陌生,我遇到了问题。在我的 NSComboBoxes 上,当重新打开下拉菜单时,它们不会突出显示当前选定的项目。我可能只是失明,或者默认的高亮颜色可能是透明的。我只是不知道。请参阅下图了解我得到的内容。

下拉图片

在这一点上,我编写的代码很少,一切都在我的故事板上完成。只是有点困惑为什么它不做一些应该很简单的事情。猜猜我在 iOS 领域花了太多时间。

因此决定将整个项目重新创建为一个单独的示例 NSCombobox,以证明在运行 Xcode 9.2 时这对我来说很简单。

示例项目设置

我连接的唯一出口是 NSComboBox 的委托和数据源。NSComboBox 上唯一更改的设置是启用数据源,并将行为更改为 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
    }
}
Run Code Online (Sandbox Code Playgroud)

根据此处的 Apple 文档,下拉列表应显示所选项目:Apple NSComboBox Docs

Wil*_*eke 6

列表将在您离开的位置打开。实现NSComboBoxDataSource方法

optional func comboBox(_ comboBox: NSComboBox, indexOfItemWithStringValue string: String) -> Int
Run Code Online (Sandbox Code Playgroud)

让组合框知道要选择哪一行。

返回值

与指定字符串匹配的项目的索引,如果没有项目匹配,则为 NSNotFound。

讨论

NSComboBox 对象使用此方法将弹出列表的选定项与文本字段的内容同步。如果您不实现此方法,则接收器不会将弹出列表的所选项目与文本字段的内容同步。