在 SwiftUI 中使用 NSTableView?

los*_*aut 7 appkit swift swiftui

有没有人NSTableView开始使用 SwiftUI?每当我运行我的代码时,我的应用程序都不会加载,但也没有错误。没有表视图的任何示例,但我认为它会使用NSViewControllerRepresentable. 我不完全确定您如何设计表格并将其添加到视图中。感谢您的帮助!

struct SampleViewController: NSViewControllerRepresentable {
    
    var tableView:NSTableView = {
        let table = NSTableView(frame: .zero)
        table.rowSizeStyle = .large
        table.backgroundColor = .clear
        return table
    }()
    
    func makeNSViewController(context: Context) -> NSViewController {
        
        return NSViewController()
    }
    
    func updateNSViewController(_ nsViewController: NSViewController, context: Context) {
        //tbd
    }
    
    func makeCoordinator() -> Coordinator {
        Coordinator(self)
    }
    
    class Coordinator: NSObject, NSTableViewDataSource, NSTableViewDelegate {
        var parent: SampleViewController
        
        init(_ tvController: SampleViewController) {
            self.parent = tvController
        }
        
        func numberOfRows(in tableView: NSTableView) -> Int {
            return 10
        }
        
        func tableView(_ tableView: NSTableView, viewFor tableColumn: NSTableColumn?, row: Int) -> NSView? {
            return nil
        }
        
        func tableView(_ tableView: NSTableView, heightOfRow row: Int) -> CGFloat {
            return CGFloat(90)
        }
        
        func tableView(_ tableView: NSTableView, shouldSelectRow row: Int) -> Bool {
            return false
        }

    }

    
}


struct SampleView: View {
    var body: some View {
        SampleViewController()
    }
}
Run Code Online (Sandbox Code Playgroud)

Mat*_*tie 1

我有一种感觉,您可能已经弄清楚了这一点,但您实际上尚未将该属性设置tableViewview视图控制器的属性。因此,当呈现时,您的 SwiftUI 视图将由一个普通的NSView.

在这个特定的例子中,我认为 anNSViewRepresentable可能会更好,因为你的控制器无论如何都没有逻辑。

为了以防万一这有帮助,另一件事要记住的是协调员的角色及其与财产的关系parent。由于协调器是创建并重用的,因此如果重新创建 SwiftUI 视图,协调器不会更新parent。当我尝试重新加载表数据时,这确实让我绊倒了func updateNSViewController(_ nsViewController: NSViewController, context: Context)