对 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
列表将在您离开的位置打开。实现NSComboBoxDataSource
方法
optional func comboBox(_ comboBox: NSComboBox, indexOfItemWithStringValue string: String) -> Int
Run Code Online (Sandbox Code Playgroud)
让组合框知道要选择哪一行。
返回值
与指定字符串匹配的项目的索引,如果没有项目匹配,则为 NSNotFound。
讨论
NSComboBox 对象使用此方法将弹出列表的选定项与文本字段的内容同步。如果您不实现此方法,则接收器不会将弹出列表的所选项目与文本字段的内容同步。
归档时间: |
|
查看次数: |
1127 次 |
最近记录: |