首页 > 解决方案 > 将第二个视图控制器添加到单个窗口应用程序

问题描述

我有一个包含多个 NSTableView 项目的单个窗口应用程序。本来我一直让tableView数据源方法一样,只是根据tableView传递过来的切换。有人建议我——我同意——最好为 tableViews 分离视图控制器(如果不是现在,最终随着事情变得更加复杂)。

我想我需要创建第二个 ViewController 类文件,并简单地将 NSTableViews 连接到将处理 tableView 数据的新 ViewController 类,但我看不到如何在情节提要中建立连接。

什么是正确的方法?我将不胜感激任何提示或建议。(我搜索了教程来帮助解释如何最好地做到这一点,但找不到与我正在尝试做的事情相关的任何内容。)

// MARK: - TableView 的东西

func numberOfRows(in tableView: NSTableView) -> Int {
            
    var numberOfRows : Int = 0
    
    if tableView == mainTableView2 {
        print("number of rows for mainTableView2")
        numberOfRows = allFilesAsPaths.count
    } else if tableView == fileTypeTableView {
        print("number of rows for fileTypeTableView")
        numberOfRows = fileTypesDict.count
    } else if tableView == exifTableView {
        numberOfRows = exifData.count
        print("exifData.count = \(exifData.count)")
        print("number of rows for exifTableview \(numberOfRows)")
    }
    return numberOfRows
}

func tableView(_ tableView: NSTableView, objectValueFor tableColumn: NSTableColumn?, row: Int) -> Any? {
    
    var val : String = ""
    
    if tableView == mainTableView2 {
    val = allFilesAsPaths[row]
    }
    if tableView == exifTableView {
        if tableColumn?.identifier.rawValue == "tag" {
            let tagArray : [String] = Array(exifData.keys)
            val = tagArray[row]
        } else if tableColumn?.identifier.rawValue == "value" {
            let valueArray : [String] = Array(exifData.values)
            val = valueArray[row]
        }
    }
    
    if tableView == fileTypeTableView {

    let types : [String] = Array(fileTypesDict.keys)
    let counts : [Int] = Array(fileTypesDict.values)

    if tableColumn?.identifier.rawValue == "type" {
            val = types[row]
        } else {
            val = String(counts[row])
        }
    }
    return val
}

标签: swiftviewcontrollernstableview

解决方案


推荐阅读