Как написать оболочку SwitUI для устаревшего табличного представления - PullRequest
0 голосов
/ 22 октября 2019

Ищите пример того, как написать оболочку SwiftUI для табличного представления.

Целью этого является ограничение SwiftUI в отношении перечисления данных. См. мой предыдущий пост , в котором описывается, как мне кажется, текущая недоработка и / или ошибка в SwiftUI, в которой при использовании большого набора данных и изменении количества отображаемых строк пользовательский интерфейс блокируется и закрепляется. CPU ..

Я полагаю, что в настоящее время единственное, что можно обойти, - это написать пользовательскую оболочку для включения устаревшего табличного представления в мой 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 Ответ

1 голос
/ 22 октября 2019

Используйте UIViewControllerRepresentable или UIViewRepresentable, как описано в Учебное пособие Apple .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...