Текущий вид из UIViewRepresentable в SwiftUI

#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