美文网首页MacOS 开发收录
MacOS 开发(七):NNOutlineView纯代码实现

MacOS 开发(七):NNOutlineView纯代码实现

作者: SoaringHeart | 来源:发表于2020-04-02 14:24 被阅读0次

因为系统机制导致,纯代码实现滚动视图的时候必须自己实现 scrollView,随封装如下:


WechatIMG319.jpeg
🌰🌰:
    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
    }
    
}

Github

相关文章

网友评论

    本文标题:MacOS 开发(七):NNOutlineView纯代码实现

    本文链接:https://www.haomeiwen.com/subject/vodxphtx.html