I am using SwiftUI router which also support iOS15 (can not use NavigationStack)to navigate though different SwiftUI views. But i also want to push viewController i.e UIKIT class.
Protocol:
protocol Router {
associatedtype Route
func viewFor<T: View>(route: Route, content: () -> T) -> AnyView
}
ListRouter Structure:
struct ListRouter: Router {
typealias Route = ListRoute
var usingStackNav = false
func viewFor<T>(route: ListRoute, content: () -> T) -> AnyView where T : View {
switch route {
case .detailView(let item):
if usingStackNav {
return AnyView(NavigationLink(destination: DetailView(item)) {
content()
})
} else {
return AnyView(Button(action: { /* Update state, maybe set tab view to item */ }) {
content()
})
}
}
}
}
ListView.swift Class
enum ListRoute {
case detailView(data: Item)
}
struct ListView<ListRouter: Router>: View where ListRouter.Route == ListRoute> {
let router: ListRouter
var body: some View {
List(items) { item in
router.viewFor(route: .detailView(data: item)) {
ListItemCell(item: item)
}
}
}
}
But If detailView is Viewcontroller i.e UIKIT class how can i push navigate that while also passing some data through that?
I tried this but this is not working :
struct DetailViewController: UIViewControllerRepresentable {
typealias UIViewControllerType = UIViewController
func makeUIViewController(context: UIViewControllerRepresentableContext<LessonDetailsViewControllerWrapper>) -> UIViewController {
let viewController = DetailViewController()
return viewController
}
func updateUIViewController(_ uiViewController: UIViewController, context: UIViewControllerRepresentableContext<DetailViewController>) {}
}