从OC或swift代码跳转swiftUI页面的时候使用UIHostingController包装一下,但是有个问题是,swiftUI返回上一个页面的方式和swift中并不一样,是通过改变isActive的状态来pop的。
@State var isShow = false
var body: some View {
NavigationView {
NavigationLink(destination: Detail(), isActive: self.$isShow) {
Text("Detail")
}
}
}
那么我们怎么做到在swiftUI页面返回swift页面的呢?其实非常简单,可以通过传递闭包的方式,在swiftUI中返回事件触发的时机调用:
swift:
@objc func showSearchView(){
let searchView = SearchView.init {
self.navigationController?.popViewController(animated: true)
}
navigationController?.pushViewController(UIHostingController.init(rootView: searchView), animated: true)
}
swiftUI:
struct SearchView: View {
var popCallback : ()->()
var body: some View {
Button {
popCallback()
} label: {
Text("返回").foregroundColor(.gray)
}
}
}