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

时间:2017-12-13 21:19:02

标签: swift cocoa

对Mac应用程序编程很新,我遇到了问题。在我的NSComboBox上,当重新打开下拉列表时,它们不会突出显示当前选定的项目。我可能只是失明或者默认的高亮颜色是透明的。我只是不知道。请参阅下面的图片,了解我的目标。

Dropdown Image

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

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

Sample Project Settings

我连接的唯一插座是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

1 个答案:

答案 0 :(得分:3)

列表会打开您离开的位置。实施NSComboBoxDataSource方法

optional func comboBox(_ comboBox: NSComboBox, indexOfItemWithStringValue string: String) -> Int

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

  

返回值

     

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

     

讨论

     

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