我试图以编程方式将列添加到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