在 iOS Action Extention 中使用 SwiftUI 内容视图而不是 ActionViewController 启动

Pri*_*tta 5 ios swift swiftui

在此处输入图片说明我的整个代码库都在 UIKit 中。我想使用 swiftUI 构建我的动作扩展模块。

因为我可以添加NSExtensionPrincipalClass作为扩展 UI 的初始入口点。如何将初始入口点设置为 swiftUI 内容视图。

struct ActionExtensionInitialView: View {
    var body: some View {
        Text("Hello, World!")
    }
}
Run Code Online (Sandbox Code Playgroud)

Asp*_*eri 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")
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 它对我有用,但我没有得到扩展程序的网址。我怎样才能用 UIHostingController 做到这一点? (3认同)
  • 找到了 @AiltonVieiraPintoFilho 问题的解决方案。看来“viewDidLoad”不是 UIHostingController 的一部分,而这通常是您从扩展程序接收 URL 的地方。我找到的解决方案是使用“viewWillAppear”代替。 (2认同)