如何在 SwiftUI 中使用 UINavigationController

Posted

技术标签:

【中文标题】如何在 SwiftUI 中使用 UINavigationController【英文标题】:how to use UINavigationController in SwiftUI 【发布时间】:2021-12-24 18:00:35 【问题描述】:

我正在尝试创建 Coordinator 以从 Screen1 导航到 Screen2

这里是 UIKit 的例子

class Coordinator: AbstractCoordinator 

    var navigationController: UINavigationController?

    func goToHomeScreen() 
        navigationController?.pushViewController(HomeViewController(coordinator: self), animated: true)
    

    func start() -> UIViewController 
        self.navigationController = UINavigationController(rootViewController: LoginViewController(coordinator: self))

        return navigationController!
    

当我们使用模块化编程时,这个 Coordinator 非常有用。我想在 SwiftUI 中做同样的事情

我知道我们必须使用 NavigationView、NavigationLink 但我不明白我应该如何在 Coordinator 中使用

谁能告诉我该怎么做?

【问题讨论】:

【参考方案1】:

要在 SwiftUI 中使用 Coordinator,您需要使用两个组件:

    协调员查看和 协调器对象

协调器视图是视图层次结构的一部分,并控制其子视图的转换逻辑和整体视图上下文。协调器视图需要一个协调器对象来创建视图模型并允许不同场景之间的通信。与 UIKit 中的协调器类似,我们可以从子场景的视图模型中获得对协调器的引用,并根据视图模型的业务逻辑在协调器中触发转换事件。

❓ 为什么我们要把协调器分成两部分? 在 SwiftUI 中,我们有两个不同的职责需要由协调器负责: 视图的上下文需要由视图层次结构中的视图来控制。但是我们无法控制视图的生命周期。这可以通过 ObservableObject 轻松实现。我们可以很容易地通过引用传递它,并使其符合 Identifiable 协议。

您可以在此处获取更多详细信息: https://quickbirdstudios.com/blog/coordinator-pattern-in-swiftui/

【讨论】:

我想使用协调器,因为我正在使用模块,我想以简单的方式从 Screen1 导航到 Screen 2 在 SwiftUI 中使用 UINavigationController 可以参考:github.com/yashvyas29/YVLearning/blob/main/YVLearning/Views/…

以上是关于如何在 SwiftUI 中使用 UINavigationController的主要内容,如果未能解决你的问题,请参考以下文章

如何在 UIkit 中添加 SwiftUI 对象

如何在 SwiftUI 中使用 SFSafariViewController?

如何在 swiftUI 视图中使用按钮? [关闭]

如何在 SwiftUI 中使用 .fileimporter 保存音频文件并检索文件并在 SwiftUI 列表中显示它们的文件名?

如何在 Xcode Playground 中使用 SwiftUI?

如何在 SwiftUI 中使用渐变填充形状