【发布时间】:2019-11-26 18:06:05
【问题描述】:
有没有人让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()
}
}
【问题讨论】:
-
你试过 NSViewRepresentable 吗?我没有尝试任何一个,但我会从这个开始。
-
我首先尝试了 NSViewRepresentable,在苹果的示例 (developer.apple.com/tutorials/swiftui/interfacing-with-uikit) 中,他们使用可表示的控制器来控制页面。我认为这将是最接近的,因为他们还必须实现委托方法
-
那里有
UIPageViewController,但NSTableView是视图。那么目标是什么?这是可能的,但要使其功能齐全,需要大量的手动工作。因此,最好在故事板中准备所需的自定义控制器来管理所需的一切,然后将其包装在UIViewControllerRepresentable中。 -
你需要先制作一个带有table的MacOS应用。然后你就可以熟悉转移到swiftUI了。第二部分并不难。但是第一部分是不同的,因为 NSTableView 的行为与 UITableView 不同。
-
@Asperi 的目标是拥有一个功能齐全的 TableView,类似于我在情节提要中拥有的。我可以在故事板中很好地制作它,但想看看我是否可以删除一些故事板格式并将其移动到 SwiftUI。所以你建议在 storyboard 中创建 ViewController 并在 ViewController 类中包含所有上述协调器功能,然后将所有这些包装在 NSViewControllerRepresentable 中以在整个应用程序中使用?