在iOS动作扩展中,使用SwiftUI内容视图替代ActionViewController进行初始化。

5

enter image description here我的整个代码库都是使用UIKit编写的,我想使用SwiftUI构建我的操作扩展模块。

由于可以将NSExtensionPrincipalClass添加为扩展UI的初始入口点,那么如何将初始入口点设置为SwiftUI内容视图呢?

struct ActionExtensionInitialView: View {
    var body: some View {
        Text("Hello, World!")
    }
}
1个回答

7
你的主类可以像下面这样(在Xcode 11.2中测试并工作):
class ActionViewController: UIHostingController<AnyView> {

    // override designated initialiser
    override init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: Bundle?) {
        let contentView = ActionExtensionInitialView() // << SwiftUI root view
        super.init(rootView: AnyView(contentView))
    }

    @objc required dynamic init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
}

3
它对我有效,但我没有得到扩展的URL。我如何使用UIHostingController做到这一点? - Ailton Vieira Pinto Filho
2
找到了解决@AiltonVieiraPintoFilho的问题的方法。看起来viewDidLoad不是UIHostingController的一部分,这通常是从扩展中接收URL的地方。我找到的解决方案是改用viewWillAppear - Dominic Holmes
现在这个在Xcode 14上是有效的。 - Tualatrix Chou

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接