我試圖在基於視圖的NSTableView中顯示非常基本的數據結構。經過幾個小時的搜索,我終於得到了大部分桌子的設置點。行數是正確的,我知道func tableView(tableView: NSTableView, objectValueForTableColumn tableColumn: NSTableColumn?, row: Int)
方法爲所有單元執行,因爲它在控制檯中輸出正確的數據。不幸的是,表格顯示的是默認值,而不是我的數據數組中的String
。在Swift中基於視圖的NSTableView不顯示內容
下面的代碼:
ViewController.swift
import Cocoa
class ViewController: NSViewController {
@IBOutlet weak var myTableView: NSTableView!
var files = [FilesListData]()
override func viewDidLoad() {
super.viewDidLoad()
self.setupSampleFiles()
}
override func viewDidAppear() {
super.viewDidAppear()
}
func setupSampleFiles() {
let file1 = FilesListData(file: "test.mp3", title: "test")
let file2 = FilesListData(file: "test2.mp3", title: "test 2")
self.files = [file1, file2]
}
}
extension ViewController: NSTableViewDataSource {
func numberOfRowsInTableView(tableView: NSTableView) -> Int {
return self.files.count
}
func tableView(tableView: NSTableView, objectValueForTableColumn tableColumn: NSTableColumn?, row: Int) -> AnyObject? {
let cellView: NSTableCellView = tableView.makeViewWithIdentifier((tableColumn!.identifier), owner: self) as! NSTableCellView
let fileData = self.files[row]
if tableColumn!.identifier == "fileCol" {
cellView.textField!.stringValue = fileData.file
} else if tableColumn!.identifier == "titleCol" {
cellView.textField!.stringValue = fileData.title
} else {
cellView.textField!.stringValue = "N/A"
}
return cellView
}
}
extension ViewController: NSTableViewDelegate {
}
FilesListData.swift
import Foundation
class FilesListData: NSObject {
var file: String
var title: String
override init() {
self.file = String()
self.title = String()
}
init(file: String, title: String) {
self.file = file
self.title = title
}
}
一些更多的注意事項:在故事板,我也創建dataSource
和的插座3210添加到View Controller。我的前兩列的標識符被設置爲「fileCol」和「titleCol」。該項目編譯並運行時沒有任何錯誤或警告。以下是我的故事板的幾個截圖。
你好肯和謝謝你的徹底答案。我想保留'NSTableCellView's,因爲正如你所提到的那樣,我將能夠在後面擴展表格的複雜性。我能夠通過實現'tableView(_:viewForTableColumn:row:)'成功顯示數據。然而,綁定方法似乎很有趣,但我不知道如何實現這一點。你提到的「價值」就是'委託'出口? N.B .:我沒有提到的一件事是我的'NSTableCellView'的'textField'有一個到它的子節點'NSTextField'的插座。 – beeb
設置綁定的最簡單方法是在IB中。選擇文本字段後,選擇視圖>實用程序>顯示綁定檢查器。切換打開值綁定。對於「綁定到」彈出窗口,請選擇表格單元格視圖。對於模型關鍵路徑輸入'objectValue.file'或類似的東西。 (Xcode會顯示一個感嘆號圖標,因爲它無法驗證關鍵路徑是否有效,但是您可以忽略它。這是系統的動態性質,因爲它無法知道'objectValue'類型是什麼類型。) –
精彩,這就像一個魅力!再次感謝 – beeb