如何为旧表视图编写SwitUI包装器

时间:2019-10-21 23:18:45

标签: ios swift xcode swiftui

查找有关如何为表视图编写SwiftUI包装器的示例。

之所以这样做是因为SwiftUI在列出数据方面受到限制。请参阅my previous post,其中描述了我认为是SwiftUI中当前的开发不足和/或错误,其中在使用大数据集并修改显示的行数时,UI会锁定并固定CPU。 / p>

我相信目前,唯一的解决方法是编写一个自定义包装器,以将旧表View合并到我的SwiftUI View中。我无法弄清楚如何完成此操作,也找不到任何现有示例这个特定的UIView。任何人都可以通过示例代码提供任何帮助吗?

表视图必须从CoreData实体中提取数据。

我希望能够这样称呼它:

struct ContentView: View {

    var body: some View {

        MyCustomTableViewWrapper()

    }

}

到目前为止,这是我使用UIViewRepresentable的结果,我不知道是如何将CoreData放入此UITableView中的:


import Foundation
import UIKit
import SwiftUI
import CoreData


struct LegacyTableView : UIViewRepresentable {

    func makeCoordinator() -> Coordinator {
        Coordinator(self)
    }


    func makeUIView(context: Context) -> UITableView {
        let control = UITableView()
        control.refreshControl = UIRefreshControl()
        control.refreshControl?.addTarget(context.coordinator, action:
            #selector(Coordinator.handleRefreshControl),
                                          for: .valueChanged)

        // Simply to give some content to see in the app
        let label = UILabel(frame: CGRect(x: 0, y: 0, width: 200, height: 30))
        label.text = "Table View Content"
        control.addSubview(label)

        return control
    }


    func updateUIView(_ uiView: UITableView, context: Context) {
        // code to update scroll view from view state, if needed
    }

    class Coordinator: NSObject {
        var control: LegacyTableView

        init(_ control: LegacyTableView) {
            self.control = control
        }

        @objc func handleRefreshControl(sender: UIRefreshControl) {
            // handle the refresh event

            sender.endRefreshing()
        }
    }


}

1 个答案:

答案 0 :(得分:1)

按照Apple's tutrial所述使用chart.update({ tooltip: { enabled: false }, plotBorderWidth: 1 }); UIViewControllerRepresentable