0

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>) {}
    } 
IOSDev
  • 205
  • 2
  • 10

0 Answers0