Integrate UIOnboarding with SwiftUI
mainSince UIOnboardingViewController is a UIKit component, you must wrap it using the UIViewControllerRepresentable protocol to use it in SwiftUI.
Recommended pattern:
- Create an
OnboardingViewstruct conforming toUIViewControllerRepresentable. - Use a
Coordinatorclass within the struct to implementUIOnboardingViewControllerDelegate. - Present the
OnboardingViewusing the.fullScreenCover()modifier. - Use
.edgesIgnoringSafeArea(.all)to ensure the onboarding covers the entire screen.
import SwiftUI
import UIOnboarding
struct OnboardingView: UIViewControllerRepresentable {
typealias UIViewControllerType = UIOnboardingViewController
func makeUIViewController(context: Context) -> UIOnboardingViewController {
let onboardingController: UIOnboardingViewController = .init(withConfiguration: .setUp())
onboardingController.delegate = context.coordinator
return onboardingController
}
func updateUIViewController(_ uiViewController: UIOnboardingViewController, context: Context) {}
class Coordinator: NSObject, UIOnboardingViewControllerDelegate {
func didFinishOnboarding(onboardingViewController: UIOnboardingViewController) {
onboardingViewController.dismiss(animated: true, completion: nil)
}
}
func makeCoordinator() -> Coordinator {
return .init()
}
}
// Usage in a SwiftUI View
struct ContentView: View {
@State private var showingOnboarding = true
var body: some View {
NavigationView {
Text("Hello, UIOnboarding!")
.fullScreenCover(isPresented: $showingOnboarding) {
OnboardingView()
.edgesIgnoringSafeArea(.all)
}
}
}
}