处理来自 UIKit 的 SwiftUI 视图回调
Handle SwiftUI view callback from UIKit
我在 UIViewController 中显示了一个 SwiftUI 视图。它植根于 UIHostingController(通过故事板嵌入到视图控制器中的 UIContainerView 中)。
现在,这个 SwiftUI 视图有一个我想从 UIViewController 内部处理的按钮。
我试过为 SwiftUI 视图提供一个函数(名为 dismiss),如下所示:
import SwiftUI
struct SkipView: View {
var dismiss: (() -> Void)?
var body: some View {
HStack {
Button(action: {
let _ = self.dismiss!
}) {
Text("Skip")
}
}
}
}
然后在 UIViewController 中,它看起来像这样:
@IBSegueAction func addSkipView(_ coder: NSCoder) -> UIViewController? {
var skipView = SkipView(entry: self.entry)
skipView.dismiss = {
self.skipContainerView.isHidden = true
print("Why isn't this getting called?")
}
return UIHostingController(coder: coder, rootView: skipView)
}
但是,skipView.dismiss 回调没有在我的视图控制器中被调用。
知道如何将我的 SwiftUI 视图中的按钮操作正确地传递给 UIKit 视图控制器吗?
代码:
let _ = self.dismiss!
不调用self.dismiss
;你没有括号!
你需要做这样的事情:
if let someDismiss = self.dismiss {
someDismiss()
}
我在 UIViewController 中显示了一个 SwiftUI 视图。它植根于 UIHostingController(通过故事板嵌入到视图控制器中的 UIContainerView 中)。
现在,这个 SwiftUI 视图有一个我想从 UIViewController 内部处理的按钮。
我试过为 SwiftUI 视图提供一个函数(名为 dismiss),如下所示:
import SwiftUI
struct SkipView: View {
var dismiss: (() -> Void)?
var body: some View {
HStack {
Button(action: {
let _ = self.dismiss!
}) {
Text("Skip")
}
}
}
}
然后在 UIViewController 中,它看起来像这样:
@IBSegueAction func addSkipView(_ coder: NSCoder) -> UIViewController? {
var skipView = SkipView(entry: self.entry)
skipView.dismiss = {
self.skipContainerView.isHidden = true
print("Why isn't this getting called?")
}
return UIHostingController(coder: coder, rootView: skipView)
}
但是,skipView.dismiss 回调没有在我的视图控制器中被调用。
知道如何将我的 SwiftUI 视图中的按钮操作正确地传递给 UIKit 视图控制器吗?
代码:
let _ = self.dismiss!
不调用self.dismiss
;你没有括号!
你需要做这样的事情:
if let someDismiss = self.dismiss {
someDismiss()
}