我試圖以編程方式將列添加到NSTableView
,我用IB定義的視圖的一部分作爲我想重用的自定義視圖控制器的一部分(並且我將自定義每個列具體使用)。以編程方式將列添加到NSTableView
我使用數據源/委託,以提供行/列的值。我將我的代碼簡化爲重現問題所需的最小代碼。
表顯示完全古怪的行爲:我創建了1000行,但只有前17〜(那些誰適合初始視口)顯示,休息,向下滾動可見的,是空的。當滾動回來時,即使是最初的那些也不見了。另外,行視圖被裁剪。
這裏是行爲的視頻: https://www.youtube.com/watch?v=toRpIfp5A6w
對於那些誰不能播放視頻,在這裏是通過滾動截圖中途。請記住,該表應該有1000行。
這裏是我的代碼。
的AppDelegate
import Cocoa
@NSApplicationMain
class AppDelegate: NSObject, NSApplicationDelegate {
@IBOutlet weak var window: NSWindow!
func applicationDidFinishLaunching(_ aNotification: Notification) {
let controller = TestViewController()
self.window.contentView?.addSubview(controller.view)
controller.view.translatesAutoresizingMaskIntoConstraints = false
controller.view.heightAnchor.constraint(equalTo: self.window.contentView!.heightAnchor).isActive = true
controller.view.widthAnchor.constraint(equalTo: self.window.contentView!.widthAnchor).isActive = true
controller.view.trailingAnchor.constraint(equalTo: self.window.contentView!.trailingAnchor).isActive = true
}
func applicationWillTerminate(_ aNotification: Notification) {
}
}
視圖控制器
import Cocoa
class TestViewController: NSViewController {
@IBOutlet weak var tableView: NSTableView!
private var tableSource = TestTableSource()
override func viewDidLoad() {
super.viewDidLoad()
let columns = self.tableView.tableColumns
columns.forEach {
self.tableView.removeTableColumn($0)
}
let column = NSTableColumn(identifier: "c1")
column.title = "COL1"
self.tableView.addTableColumn(column)
self.tableView.delegate = self.tableSource
self.tableView.dataSource = self.tableSource
self.tableView.reloadData()
}
}
class TestTableSource: NSObject, NSTableViewDelegate, NSTableViewDataSource {
let array = (0..<1000).map { "row \($0)" }
func numberOfRows(in tableView: NSTableView) -> Int {
return array.count
}
func tableView(_ tableView: NSTableView, viewFor tableColumn: NSTableColumn?, row: Int) -> NSView? {
guard tableColumn?.identifier == "c1" else { fatalError() }
let view = NSTextField(string: array[row])
return view
}
}
視圖控制器在IB
和
就如何解決這一問題的任何建議,歡迎!
編輯:我忘了切換到基於視圖的。我上傳了新的截圖。問題仍然存在。
將表視圖切換到基於視圖。 – Willeke
感謝您的提示。我錯過了那一個。但切換到基於視圖後,它沒有解決問題。 – Marco83