组合框(NSComBox)是一种下拉选择视图控件,可以通过addItem单个或批量添加文本条目,也可以使用数据源和代理的形式管理每个条目
1.通过属性面板的Items配置
2.通过动态接口加载数据
3.使用数据源方式加载数据
属性说明
Items: 可以输入条目作为显示的列表内容
VisibleItems:最多显示多少条目在界面上,超出的条目可以通过滚动来选择
UsesDataSource:是否使用数据源方式,
响应事件
将 action事件绑定到自定义的 selectionChanged方法即可。 indexOfSelectedltem表示选择的
条目的idx序号, string Value表示选择的文本内容,代码如下:
//通过数据源设置数据
class ViewController{
func comBox(){
//定义的局部变量
let m_combobox = NSComboBox(frame: NSMakeRect(0, 0, 200, 300))
m_combobox.target = self
//1.动态增加列表内容Item
m_combobox.addItem(withObjectValue: ("Fre"));
m_combobox.addItems(withObjectValues: ["March","April","May","June","July","August","September","Octorber"])
m_combobox.selectItem(at: 0)
m_combobox.selectItem(withObjectValue: "May")
// m_combobox.selectAll(m_combobox)
m_combobox.removeItem(at: 0)
m_combobox.removeItem(withObjectValue: "May")
m_combobox.removeAllItems()
//当 NSCombo Box的 uses Data Source属性为tue时,表示要使用数据源的方式配置条目
m_combobox.usesDataSource = true
m_combobox.dataSource = self
m_combobox.delegate = self
}
fileprivatevar dataSource:NSMutableArray = {
var dataSource = NSMutableArray(array: ["Any","小王"])
return dataSource
}()
}
使用数据源和代理
当 NSCombo Box的 uses Data Source属性为tue时,表示要使用数据源的方式配置条目。使
用数据源的方式可以非常灵活地使用自定义的数据模型类去配置要显示的文本项。数据源数据
电
配置好以后,调用 reload Data方法完成它的数据加载刷新
下面的代码配置组合框使用数据源并且设置了代理:
extension ViewController:NSComboBoxDelegate,NSComboBoxDataSource{
func numberOfItems(in comboBox: NSComboBox) -> Int {
return self.dataSource.count
}
func comboBox(_ comboBox: NSComboBox, objectValueForItemAt index: Int) -> Any? {
return self.dataSource[index]
}
func comboBox(_ comboBox: NSComboBox, indexOfItemWithStringValue string: String) -> Int {
return dataSource.index(of:string)
}
func comboBoxSelectionDidChange(_ notification: Notification) {
let comBox = notification.object as! NSComboBox
let selectedIndex = comBox.indexOfSelectedItem
let selectedContent = comBox.stringValue
print("selectedIndex = (selectedIndex) selectedContent = (selectedContent)")
}
}