Как сделать кнопку, которая отклоняет представление, представленное с помощью UIHostingController/SwiftUI?

У меня есть довольно обширный проект, который я начал с UIKit, и теперь я решил использовать SwiftUI для создания нескольких простых страниц формы, но мне нужно сделать кнопку в SwiftUI, чтобы закрыть текущее представление, которое представлено следующим кодом:

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

2 ответа

Решение

Если я правильно понял снимок кода, то .topViewController() будет представлена UIHostingViewConroller когда ScheduleView показано, поэтому он должен внутри него как

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

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

Вы можете отклонить его, удерживая ссылку на него. Так что держисьvc в более публичной сфере и отклоните его, когда вам нужно.

var vc: UIViewController

или что-то вроде этого:

if let topController = UIApplication.topViewController() {
    topController.presentedViewController?.dismiss(animated: true)
}
Другие вопросы по тегам