我有一个UIKit应用程序,使用UIHostingController
来显示SwiftUI视图.在这个视图中有一个按钮,我想用它导航到另一个视图控制器.How can I push a new viewController from inside this SwiftUI view?(或者更笼统地说:我如何从SwiftUI视图内部调用我的视图控制器中的函数?)
当然,我可以只在SwiftUI中导航视图,但我最想使用UIKit,以便在业务逻辑和UI之间有清晰的分离.
import UIKit
import SwiftUI
class MainViewController: UIViewController {
var viewModel = ViewModel()
override func viewDidLoad() {
super.viewDidLoad()
addView()
}
func addView() {
let testView = SwiftUIView(viewModel: viewModel)
let controller = UIHostingController(rootView: testView)
addChild(controller)
controller.view.translatesAutoresizingMaskIntoConstraints = false
view.addSubview(controller.view)
controller.didMove(toParent: self)
NSLayoutConstraint.activate([
controller.view.widthAnchor.constraint(equalTo: view.widthAnchor),
controller.view.heightAnchor.constraint(equalTo: view.heightAnchor),
controller.view.centerXAnchor.constraint(equalTo: view.centerXAnchor),
controller.view.centerYAnchor.constraint(equalTo: view.centerYAnchor)
])
}
func navigate() { // how do I call this from inside SwiftUI testView view?
let otherView = Text("test")
let nextVc = UIHostingController(rootView: otherView)
navigationController?.pushViewController(nextVc, animated: true)
}
}
SwiftUI类似于:
import SwiftUI
struct SwiftUIView: View {
@ObservedObject var viewModel: ViewModel
var body: some View {
Button {
// push new view controller
} label: {
Text("go")
}
}
}