首页 > 解决方案 > 处理来自 UIKit 的 SwiftUI 视图回调

问题描述

我在 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 视图控制器的任何想法?

标签: swiftswiftuiuikit

解决方案


编码:

let _ = self.dismiss!

不打电话self.dismiss;你没有括号!

你需要做这样的事情:

if let someDismiss = self.dismiss {
    someDismiss()
}

推荐阅读