zoukankan      html  css  js  c++  java
  • 【Swift Mac开发】源代码创建NSTableView(含自定义NSTableViewCellView)

      1、简易的tableView

    //纯代码创建tableView,使用NSLayoutConstraint添加约束进行布局
    import Cocoa
    
    class JFSimpleTableViewController: NSViewController {
    
        var scrollView : NSScrollView!
        var tableView : NSTableView!
        
        override func viewDidLoad() {
            super.viewDidLoad()
    
            scrollView = NSScrollView(frame: self.view.bounds)
            self.view.addSubview(scrollView)
            
            tableView = NSTableView.init(frame: CGRect(x: 0, y: 0,  scrollView.bounds.size.width, height: scrollView.bounds.size.height))
            tableView.delegate = self
            tableView.dataSource = self
            
            let firstCol = NSTableColumn(identifier: NSUserInterfaceItemIdentifier(rawValue: "firstCol"))
            firstCol.width = 200
            firstCol.title = "第一列"
            tableView.addTableColumn(firstCol)
            
            let secondCol = NSTableColumn(identifier: NSUserInterfaceItemIdentifier(rawValue: "secondCol"))
            secondCol.width = scrollView.bounds.size.width - 200
            secondCol.title = "第二列"
            tableView.addTableColumn(secondCol)
            
            scrollView.documentView = tableView
        }
    
        override var representedObject: Any? {
            didSet {
            // Update the view, if already loaded.
            }
        }
    
    }
    
    
    extension JFSimpleTableViewController : NSTableViewDelegate,NSTableViewDataSource {
        
        func numberOfRows(in tableView: NSTableView) -> Int {
            return 10
        }
        
        func tableView(_ tableView: NSTableView, viewFor tableColumn: NSTableColumn?, row: Int) -> NSView? {
            let text = NSTextField()
            if tableColumn?.identifier == NSUserInterfaceItemIdentifier("firstCol") {
                text.stringValue = "(row)"
            } else {
                text.stringValue = "Hello World"
            }
    
            let cell = NSTableCellView()
            cell.addSubview(text)
            text.drawsBackground = false
            text.isBordered = false
            text.translatesAutoresizingMaskIntoConstraints = false
    
            //方法1:使用SnapKit进行布局
    //        text.snp.makeConstraints { (make) in
    //            make.centerY.equalTo(text)
    //            make.left.equalTo(13)
    //            make.right.equalTo(-13)
    //        }
            
            //方法2:使用AutoLayout自布局
            cell.addConstraint(NSLayoutConstraint(item: text, attribute: .centerY, relatedBy: .equal, toItem: cell, attribute: .centerY, multiplier: 1, constant: 0))
            cell.addConstraint(NSLayoutConstraint(item: text, attribute: .left, relatedBy: .equal, toItem: cell, attribute: .left, multiplier: 1, constant: 13))
            cell.addConstraint(NSLayoutConstraint(item: text, attribute: .right, relatedBy: .equal, toItem: cell, attribute: .right, multiplier: 1, constant: -13))
            return cell
        }
        
        func tableView(_ tableView: NSTableView, rowViewForRow row: Int) -> NSTableRowView? {
            let rowView = NSTableRowView()
            rowView.isEmphasized = false
            return rowView
        }
    }

      2、自定义NSTableCellView

    import Cocoa
    
    class JFTableViewCell: NSTableCellView {
    
        var picImageView : NSImageView!
        var titleLab : NSTextField!
    
        override init(frame frameRect: NSRect) {
            super.init(frame: frameRect)
            configureView()
        }
        
        required init?(coder: NSCoder) {
            fatalError("init(coder:) has not been implemented")
        }
        override func draw(_ dirtyRect: NSRect) {
            super.draw(dirtyRect)
    
            // Drawing code here.
        }
        
        func configureView() {
            picImageView = NSImageView()
            picImageView.wantsLayer = true
            picImageView.layer?.backgroundColor = NSColor.red.cgColor
            self.addSubview(picImageView)
            
            titleLab = NSTextField()
            titleLab.textColor = NSColor.black
            titleLab.stringValue = "custom Cell"
            titleLab.drawsBackground = false
            titleLab.isBordered = false
            titleLab.translatesAutoresizingMaskIntoConstraints = false
            self.addSubview(titleLab)
            
            picImageView.snp.makeConstraints { (make) in
                make.left.equalTo(10)
                make.centerY.equalToSuperview()
                make.width.height.equalTo(30)
            }
            
            titleLab.snp.makeConstraints { (make) in
                make.left.equalTo(picImageView.snp.right).offset(10)
                make.centerY.equalTo(picImageView)
                make.height.equalTo(20)
                make.right.equalTo(-10)
            }
            
        }
        
    }
    import Cocoa
    import SnapKit
    
    class ViewController: NSViewController {
    
        var scrollView : NSScrollView!
        var tableView : NSTableView!
        
        override func viewDidLoad() {
            super.viewDidLoad()
    
            scrollView = NSScrollView(frame: self.view.bounds)
            self.view.addSubview(scrollView)
            
            tableView = NSTableView.init(frame: CGRect(x: 0, y: 0,  scrollView.bounds.size.width, height: scrollView.bounds.size.height))
            tableView.delegate = self
            tableView.dataSource = self
    
            
            let firstCol = NSTableColumn(identifier: NSUserInterfaceItemIdentifier(rawValue: "firstCol"))
            firstCol.width = 200
            firstCol.title = "第一列"
            tableView.addTableColumn(firstCol)
            
            let secondCol = NSTableColumn(identifier: NSUserInterfaceItemIdentifier(rawValue: "secondCol"))
            secondCol.width = scrollView.bounds.size.width - 200
            secondCol.title = "第二列"
            tableView.addTableColumn(secondCol)
            
            scrollView.documentView = tableView
        }
    
        override var representedObject: Any? {
            didSet {
            // Update the view, if already loaded.
            }
        }
    
    }
    
    
    extension ViewController : NSTableViewDelegate,NSTableViewDataSource {
        
        func numberOfRows(in tableView: NSTableView) -> Int {
            return 10
        }
        
        func tableView(_ tableView: NSTableView, viewFor tableColumn: NSTableColumn?, row: Int) -> NSView? {
            
            var frame = NSRect.zero
            if tableColumn?.identifier == NSUserInterfaceItemIdentifier("firstCol") {
                frame = NSRect(x: 0, y: 0,  200, height: 30)
            } else {
                frame = NSRect(x: 0, y: 0,  self.scrollView.bounds.width - 200, height: 30)
            }
            let cellView = JFTableViewCell(frame: frame)
            if tableColumn?.identifier == NSUserInterfaceItemIdentifier("firstCol") {
                cellView.titleLab.stringValue = "(row)"
            } else {
                cellView.titleLab.stringValue = "test"
            }
            
            return cellView
            
        }
        
        func tableView(_ tableView: NSTableView, rowViewForRow row: Int) -> NSTableRowView? {
            let rowView = NSTableRowView()
            rowView.isEmphasized = false
            return rowView
        }
    }

      

    分享链接:

    工作之余,开了一个淘宝小店,分别销售日常必备生活用品,期待您的光临!点击下图,跳转店铺首页!
  • 相关阅读:
    Java之时间处理(当前年的上一年、上一季度、当月、当季)
    Nginx代理之大文件下载失败问题
    PageHelper之排序
    MySQL之集群配置
    Java之判断字符串是否为数字(包含浮点型数据)
    /bin/mysqld: error while loading shared libraries: libaio.so.1: cannot open shared object file:
    Error Code: 1153
    413 Request Entity Too Large
    MyBatis分页插件失效问题之解决
    HikariConfig 连接池属性详解
  • 原文地址:https://www.cnblogs.com/xjf125/p/14754196.html
Copyright © 2011-2022 走看看