#ios #uitableview #swiftui #uikit #segue
#iOS #uitableview #swiftui #uikit #segue
Вопрос:
Я только что создал UIKit TableView с UIViewRepresentable
.
Теперь мне нужно представить новое представление SwiftUI, если выбрана ячейка таблицы.
Это то, что я делал до сих пор:
struct UIKitTableView: UIViewRepresentable {
@Binding var showDetail: Bool
func makeCoordinator() -> Coordinator {
Coordinator(showDetail: self.$showDetail)
}
class Coordinator: NSObject, UITableViewDataSource, UITableViewDelegate {
@Binding var showDetail: Bool
/// Did select row at
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
self.showDetail = true
}
Теперь в моем представлении SwiftUI я могу представить представление с:
NavigationLink(destination: CellDetail(), isActive: self.$showDetail) {
Но мне также нужно передать данные из соответствующей ячейки, и мне было интересно, какой подход является наилучшим.
Мой другой вопрос: правильный ли подход @Binding showDetail? Как я могу улучшить свое решение?
Комментарии:
1. Вы нашли решение?
Ответ №1:
В соответствии с ситуацией, которую вы описываете, я не понимаю, зачем вам нужно использовать UIViewRepresentable
, поскольку у SwiftUI уже есть очень хорошая реализация под названием List
Вот фрагмент кода, который поможет вам отобразить подробный вид:
import SwiftUI
struct MasterView: View {
private let cells = [
"Cell 1", "Cell 2", "Cell 3"
]
var body: some View {
NavigationView {
List(cells, id: .self) { cell in
NavigationLink(destination: DetailsView(content: cell)) { // Creates all the logic to show detail view.
Text(cell)
}
}.navigationBarTitle("List")
}
}
}
struct DetailsView: View {
let content: String
var body: some View {
VStack {
Text(content)
.font(.largeTitle)
}
}
}
Имейте в виду, что UIViewRepresentable
это помогает только тогда, когда представление еще не реализовано в SwiftUI.
Комментарии:
1. Я уже знаю, что у нас есть Список. Но поскольку конечное и ведущее действие не реализованы в списке SwiftUI, я выбираю для UIViewRepresentable.
2. Тогда я бы посоветовал вам воспользоваться библиотекой Introspect