Use SwiftUI View with UIKit Project easily.
With UIHostingController, I faced bugs that were hard to predict and could not be resolved. That's why I made SwiftUINavigator to solve those problems.
![스크린샷 2023-10-15 오후 2 20 50](https://private-user-images.githubusercontent.com/85481204/275303771-ddfa6af3-9dcc-4295-8715-8ce26aa06565.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzk0ODM0OTUsIm5iZiI6MTczOTQ4MzE5NSwicGF0aCI6Ii84NTQ4MTIwNC8yNzUzMDM3NzEtZGRmYTZhZjMtOWRjYy00Mjk1LTg3MTUtOGNlMjZhYTA2NTY1LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMTMlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjEzVDIxNDYzNVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTYxNzQwNjYwYjAxMDJhODY1ZGIxMTY0ZjRhM2FlZTk4YmYyYWI0ODBlNTk5ZTIzN2U0MmNhZWQ4M2VhYjFkODkmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.MZrN9e3xVZesfuqyPNm6pX0yyhV4qATN9RHma26Ecak)
let viewController = HomeView() // View
.asViewController() // WrapperViewController
.title("HomeView") // UIViewController
.backgroundColor(.gray) // UIViewController
.hidesBottomBarWhenPushed(true) // UIViewController
weak var navigator: Navigator?
let controller = DestinationView().asViewController()
navigator.push(controller)
weak var navigator: Navigator?
let controller = DestinationView().asViewController()
navigator?.present(controller, .popover)
weak var navigator: Navigator?
navigator.pop(to: "HomeView")
weak var navigator: Navigator?
navigator.pop()
weak var navigator: Navigator?
navigator.dismiss()
func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
guard let scene = (scene as? UIWindowScene) else { return }
window = UIWindow(frame: scene.coordinateSpace.bounds)
window?.windowScene = scene
let controller = RootView().asViewController()
let navigationController = UINavigationController(rootViewController: controller)
window?.rootViewController = navigationController
window?.makeKeyAndVisible()
}
struct RootView: Wrappable {
weak var navigator: Navigator?
var body: some View {
Button("Button") {
let controller = DestinationView().asViewController()
navigator?.push(controller)
}
}
}
struct DestinationView: Wrappable {
weak var navigator: Navigator?
var body: some View {
Button("Button") {
navigator?.pop()
}
}
}