使用swift使用NSPopupButtonCell

时间:2017-08-11 16:41:56

标签: swift macos nstableview

我一直在尝试将NSTableView中的一个单元格更改为下拉菜单,但一直没有成功。我阅读了Apple开发人员文档,但它没有举例说明如何在NSTableView中使用NSPopupButtonCell。我搜索了论坛,包括这里,只发现了一个有点相关的例子,除了它是在objective-c中,所以它对我的swift应用程序不起作用。该表的代码如下:

extension DeviceListViewController:NSTableViewDataSource, NSTableViewDelegate{
// get the number of rows for the table
func numberOfRows(in tableView: NSTableView) -> Int {
   return homedevices.count
}
// use the data in the homedevices array to populate the table cells
func tableView(_ tableView: NSTableView, viewFor tableColumn: NSTableColumn?, row: Int) -> NSView?{
    let result  = tableView.make(withIdentifier: (tableColumn?.identifier)!, owner: self) as! NSTableCellView
    if tableColumn?.identifier == "ID" {
        result.textField?.stringValue = homedevices[row].id
    } else if tableColumn?.identifier == "Name" {
        result.textField?.stringValue = homedevices[row].name
        result.imageView?.image = homedevices[row].image
    } else if tableColumn?.identifier == "Type" {
        result.textField?.stringValue = homedevices[row].type
    } else if tableColumn?.identifier == "Button" {
        result.textField?.integerValue = homedevices[row].button
    }
    return result
}
// facilitates data sorting for the table columns
func tableView(_ tableView: NSTableView, sortDescriptorsDidChange oldDescriptors: [NSSortDescriptor]) {
    let dataArrayMutable = NSMutableArray(array: homedevices)
    dataArrayMutable.sort(using: tableView.sortDescriptors)
    homedevices = dataArrayMutable as! [HomeDevice]
    tableView.reloadData()
}


}

我真的只是希望能够允许下拉选择来更改分配给特定家庭设备的按钮(一个简单的整数),而不必在文本字段中键入数字来编辑该值。不幸的是,当我将弹出按钮单元添加到IB中的表格时,我的表格单元格的所有视图都被删除了。所以我可能需要以不同的方式创建表。但是我读过和尝试过的大部分内容都会导致运行时错误或显示空表。

编辑: 第3天: 今天我一直在这里读书:https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/TableView/PopulatingViewTablesWithBindings/PopulatingView-TablesWithBindings.html 还有许多其他地方,但我没有代表发布任何更多的链接。

我在IB中添加了NSPopupButton,但我不确定如何设置该值。我试过result.objectValue = homedevices[row].button,但这不起作用。我想我需要一个数组控制器对象。那么我尝试在我的DeviceListViewController中为对象创建一个插座,如@IBOutlet var buttonArrayController: NSArrayController!我想我现在需要以某种方式找到一种方法将阵列控制器连接到我的homedevices数组。

所以我在这里查看了示例代码: https://github.com/blishen/TableViewPopup

这是在Objective-C中,这不是我正在使用的语言,但是如果我在一周的不同时间继续查看它,我可能会想出如何制作一个下拉菜单。

所以我继续在这方面工作,目前没有解决方案。

0 个答案:

没有答案