swift跳转swiftUI页面

1,467 阅读1分钟

 从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)
            }
    }
}