在ViewController中时NSTableView不起作用

时间:2019-02-20 13:41:34

标签: swift macos

由于某种原因,当我将NSTableView的代码放入ViewController时,没有出现任何单元格,但是如果我将代码放入AppDelegate,则一切正常。

关于为什么发生这种情况的任何想法?如果有帮助,我正在使用.xib文件。

class ViewController: NSViewController{
    var delegate: AppDelegate? = nil

    @IBOutlet weak var tableView: NSTableView!

    override func viewDidLoad() {
        super.viewDidLoad()
        delegate = NSApplication.shared.delegate as? AppDelegate
        tableView.dataSource = self
        tableView.delegate = self
    }
}

extension ViewController: NSTableViewDataSource{    
    func numberOfRows(in tableView: NSTableView) -> Int {
        print(delegate?.FlightList.count ?? 0)
        return delegate?.FlightList.count ?? 0
    }
}

extension ViewController: NSTableViewDelegate{
    func tableView(_ tableView: NSTableView, viewFor tableColumn: NSTableColumn?, row: Int) -> NSView? {

        var text: String = ""
        var cellIdentifier: String = ""


        guard let item = delegate?.FlightList[row] else {
            return nil
        }


        if tableColumn == tableView.tableColumns[0] {
            text = item.flightName
            cellIdentifier = "flightID"
        }

        if let cell = tableView.makeView(withIdentifier: NSUserInterfaceItemIdentifier(cellIdentifier), owner: nil) as? NSTableCellView {
            cell.textField?.stringValue = text
            return cell
        }
        return nil
    }
}

1 个答案:

答案 0 :(得分:0)

您需要实现 NSTableViewDataSource,NSTableViewDelegate 协议,以告知该表是从其他表获取数据的类

 tableView.dataSource = self
tableView.delegate = self

将无法工作,则无需使用应用程序委托