无法使用 macOS 填充 xib 创建的 swift tableView



我无法使用 Xcode 11.2 xib 在 macOS 10.14.6 中填充基于单元格的快速表视图。 该应用程序是基于文档的,表视图是使用单独的窗口控制器xib创建的。 在 Xcode 中以编程方式创建的类似项目工作正常,包括拖放;我对使用 xibs 相对较新,可能没有正确设置。 已在 xib 中设置了列标识符,并且 NSTableViewDataSource 和 NSTableViewDelegate 已添加到窗口控制器中。 相关的源代码如下,完整的 Xcode 项目可以在这里下载:https://www.dropbox.com/s/6tsb98b7iihhfxl/tableView.zip?dl=0

任何帮助使用字符串数组填充表视图将不胜感激。 我也想让拖放工作,但现在只需让数组项目显示在表视图中即可。 它正确地创建了四行,对应于数组中的元素数量,但没有可见文本。 tableView 是基于单元格的,但如果效果更好,我可以使用基于视图的视图。 提前谢谢你。

class WindowController: NSWindowController, NSTableViewDataSource, NSTableViewDelegate {
@IBOutlet var tableView: NSTableView!
var sports : [String] = ["Basketball","Baseball","Football","Tennis"]
override func windowDidLoad() {
super.windowDidLoad()
tableView.registerForDraggedTypes([NSPasteboard.PasteboardType.fileURL])
tableView.dataSource = self
tableView.delegate = self
}
func numberOfRows(in tableView: NSTableView) -> Int {
return (sports.count)
}
func tableView(_ tableView: NSTableView, objectValueFor tableColumn: NSTableColumn?, row: Int) -> Any? {
var value : Any? = 0
let columnIdentifier : String = (tableColumn?.identifier.rawValue)!
if (columnIdentifier == "Col1"){
value = sports[row]
}
return value
}

In Document.swiftwindowControllershowTableView()结束时发布,表视图会丢失其数据源。将windowController添加到文档的窗口控制器或保留对windowController的强引用。

@IBAction func showTableView(_ sender: Any) {
let windowController = WindowController.init(windowNibName:NSNib.Name("WindowController"))
addWindowController(windowController)
windowController.showWindow(nil)
}

最新更新