如何制作一个按钮来关闭使用UIHostingController / SwiftUI呈现的视图?

时间:2020-01-05 04:37:18

标签: swiftui uihostingcontroller

我有一个从UIKit开始的相当广泛的项目,现在我决定使用SwiftUI制作一些简单的表单页面,但是我需要在SwiftUI中创建一个按钮以关闭当前视图,该视图随以下内容呈现代码:

   func goToSchedule() {
        let vc = UIHostingController(rootView: ScheduleView())
        if let topController = UIApplication.topViewController() {
            topController.present(vc, animated: true, completion: nil)
        }
    }

2 个答案:

答案 0 :(得分:3)

您可以通过保留对它的引用来关闭它。因此,将vc置于更大的公共范围内,并在需要时将其关闭。

var vc: UIViewController

或类似的东西:

if let topController = UIApplication.topViewController() {
    topController.presentedViewController?.dismiss(animated: true)
}

答案 1 :(得分:1)

如果我正确理解了代码快照,那么在显示.topViewController()时,UIHostingViewConroller将会显示在ScheduleView上,因此它应该像里面一样

var body: some View {
    // ...
    // somewhere ...

    Button("Close") {
        if let topController = UIApplication.topViewController() {
            topController.dismiss(animated: true)
        }
    }
}