MacOS 开发(七):NNOutlineView纯代码实现
2020-04-02 本文已影响0人
SoaringHeart
因为系统机制导致,纯代码实现滚动视图的时候必须自己实现 scrollView,随封装如下:

🌰🌰:
lazy var outlineView: NNOutlineView = {
let view = NNOutlineView(frame: .zero)
view.floatsGroupRows = false
view.allowsColumnResizing = true;
view.dataSource = self
view.delegate = self
let column = NSTableColumn.create(identifier: "TextCell", title: "目录")
view.addTableColumn(column)
return view
}()
override func viewDidLoad() {
super.viewDidLoad()
// Do view setup here.
view.addSubview(outlineView.enclosingScrollView!)
}
override func viewWillAppear() {
super.viewWillAppear()
outlineView.reloadData()
}
// MARK: -lifecycle
override func viewDidLayout() {
super.viewDidLayout()
outlineView.enclosingScrollView!.frame = view.bounds
}
视图封装:
class NNOutlineView: NSOutlineView {
lazy var scrollView: NSScrollView = {
let scrollView = NSScrollView()
scrollView.backgroundColor = NSColor.red
scrollView.drawsBackground = false
scrollView.hasHorizontalScroller = true
scrollView.hasVerticalScroller = true
scrollView.autohidesScrollers = true
return scrollView
}()
var adjustsTableColumnsWidth = true
// MARK: -lifecycle
override init(frame frameRect: NSRect) {
super.init(frame: frameRect)
setupUI()
}
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
override func draw(_ dirtyRect: NSRect) {
super.draw(dirtyRect)
// Drawing code here.
}
override func layout() {
super.layout()
if adjustsTableColumnsWidth == true {
for column in tableColumns {
column.width = scrollView.bounds.width/CGFloat(tableColumns.count);
}
}
}
// MARK: -funtions
func setupUI() {
scrollView.documentView = self
}
}