我用一个按钮显示和解说了一个swiftUI视图,它工作得很好。
swiftUI视图:
struct SmartG_SwiftUI: View {
var dismissAction: (() -> Void)
var body: some View {
Button(action: {
dismissAction()
}) {}
}
}我介绍的是来自SwiftUI的UIKit视图控制器,通过这种方式:
let hostingVC = UIHostingVC(rootView: SmartG_SwiftUI(dismissAction: {
vc?.dismiss( animated: true, completion: nil )
}))
vc?.present(hostingVC, animated: true, completion: nil)我的问题是,我怎么能把这个按钮放在一个单独的结构中呢?所以为了有这样的东西:
struct SmartG_SwiftUI: View {
var dismissAction: (() -> Void)
Header()
}
struct Header: View {
Button(action: {
dismissAction() //unknown here
}) {}
}发布于 2021-12-08 18:23:26
与其手工滚动您自己的解聘操作并传入它,SwiftUI还没有通过一个环境变量提供它自己的解聘操作。我还没有在主机控制器的基础上使用它,但相反地,没有看到任何迹象表明它不工作.(编辑:进行二次检查,并明确适用于封装在`UIViewController.present(:animation:completion:)`_.)中并通过UIHostingController显示的SwiftUI视图。
总的办法是:
struct MyView: View {
@Environment(\.dismiss) var dismiss
var body: some View {
Button {
dismiss()
} label: {
Text("Close")
}
}
}但是,这不一定是宿主控制器中最顶层的视图;因为解聘操作在环境中,所以它也可以在您的Header视图中使用。
请注意,对于iOS 13或14,语法稍微冗长一些:
struct MyView: View {
@Environment(\.presentationMode) var presentationMode
var body: some View {
Button {
presentationMode.wrappedValue.dismiss()
} label: {
Text("Close")
}
}
}https://stackoverflow.com/questions/70279444
复制相似问题