Ищите пример того, как написать оболочку 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()
}
}
}