首页 > 解决方案 > 从 swiftUI 中的一个嵌入式 UIViewController 导航到 swift UI 中的另一个嵌入式 UIViewcontroller

问题描述

我有一个嵌入在 swiftUI 视图中的 UIViewController

struct ContentView_Previews: PreviewProvider {
static var previews: some View {
    ContentView(overlayShow: OverlayShow())
    }
}

struct OnboardingWrapper: UIViewControllerRepresentable {
    var overlayShow: OverlayShow
    func makeUIViewController(context: Context) -> ReturnSomthing {
        let controller = ReturnSomthing(shareConfig: onboardingConfig)
        controller.showOverlay = overlayShow
        return controller
    }

   func updateUIViewController(_ uiViewController: ReturnSomthing, context: Context) {
    
    }

    public typealias UIViewControllerType = ReturnSomthing
}

我希望能够直接从 SwiftUI 导航到另一个带有嵌入式 UIViewController 的 SwiftUI 视图 SO,我在 SwiftUI 的视图上做了

struct ContentView: View {
    @ObservedObject var overlayShow: OverlayShow = OverlayShow()
    var body: some View {

        NavigationView {
            NavigationLink(destination: OverlayView(overlay:     LoadingUnknownOverlayViewContainer(description: "it is spinning :0", designModel:     LoadingOverlayDesignModel(type: .unknown))), isActive: $overlayShow.isShowingOverlay) {
                OnboardingWrapper(overlayShow: overlayShow) 
            }
        }
    }
}

导航激活的条件是overlayShow.isShowingOverlayis true。此变量在 UIViewController 中使用ObservableObject.

问题是,overlayShow.isShowingOverlay无论我在哪里点击第一个 UIViewController的值,OnboardingWrapper导航都会被激活并转到下一页。

为了更清楚,我发布了屏幕录像。在此处输入图像描述 请问我该如何解决这个问题。

标签: swiftuiuiviewcontrollernavigationviewuiviewcontrollerrepresentable

解决方案


听起来您正在看到 OnboardingWrapper,当您单击它时,您会看到 OverlayView。也许这会有所帮助:

    var body: some View {
        NavigationView {
            OnboardingWrapper(overlayShow: overlayShow)
            NavigationLink(destination: OverlayView(
                overlay:LoadingUnknownOverlayViewContainer(
                    description: "it is spinning :0",
                    designModel: LoadingOverlayDesignModel(type: .unknown))),
                    isActive: $overlayShow.isShowingOverlay) {
                EmptyView() 
            }
        }
    }

OnboardingWrapper 会出现,然后当 overlayShow.isShowingOverlay 为 true 时,应该呈现 OverlayView。


推荐阅读