首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SwiftUI -显示来自SwiftUI的ViewController/TableViewController

SwiftUI -显示来自SwiftUI的ViewController/TableViewController
EN

Stack Overflow用户
提问于 2021-01-11 19:26:38
回答 1查看 603关注 0票数 2

该应用程序仍然大量使用ViewControllers和TableViewControllers,这使得SwiftUI很难集成。

首先,我从一个swiftUI视图展示了一个ViewController视图。

代码语言:javascript
复制
class SwiftUIViewController : UIViewController {

    let contentView = UIHostingController(rootView: SwiftUIView())

    override func viewDidLoad() {
        super.viewDidLoad()
    
        view.addSubview(contentView.view)
    }
}

现在,在我的SwiftUIView中,我需要启动ViewControllers和TableViewControllers。我创建了一个注射器类,它可以与.sheet一起使用来显示来自SwiftUI的视图控制器。

代码语言:javascript
复制
struct ViewControllerInjector : UIViewControllerRepresentable {

    let viewController: UIViewController

    func makeUIViewController(context: Context) -> UIViewController {
        return viewController
    }
    func updateUIViewController(_ uiViewController: UIViewController, context: Context) {
    
    }
}

现在这种类型的作品,唯一的问题是,我似乎无法找到一种方式来呈现ViewController,而不是一个.sheet

代码语言:javascript
复制
struct SwiftUIView : View {
    @State private var showingVC1 = false
    ...

    .sheet(isPresented: $showingVC1) {
        ViewControllerInjector(viewController: ViewController1())
    }

    ...
}

我想完全离开快速ui屏幕,继续使用视图控制器,直到我按下后退按钮并返回到SwiftUI屏幕。而且,即使我创建了第二个专用于TableViewControllers的注入器类,注入器似乎也不适用于TableView。

这种导航方式可能吗?如果有什么不清楚的地方,不要犹豫留下评论。谢谢

EN

回答 1

Stack Overflow用户

发布于 2021-01-17 19:07:52

问题是.sheet是一个模态视图,您希望它成为全屏视图吗?在这种情况下,尝试用.fullScreenCover替换.sheet

若要在TableViewController中显示SwiftUI,请尝试将UIViewController切换到UITableViewController或UITableView。下面是我不久前在这里发现的一个代码片段:

代码语言:javascript
复制
struct UITableViewRepresentable: UIViewRepresentable {

    func makeUIView(context: Context) -> UITableView {
   
        uiTableView.dataSource = context.coordinator
        uiTableView.delegate = context.coordinator

        }

        uiTableView.register(HostingCell.self, forCellReuseIdentifier: "Cell")
        return uiTableView
    }

    func updateUIView(_ uiTableView: UITableView, context: Context) {}

    func makeCoordinator() -> Coordinator {
        return Coordinator(self)
    }

    class HostingCell: UITableViewCell { // just to hold hosting controller
        var host: UIHostingController<AnyView>?
    }

    class Coordinator: NSObject, UITableViewDelegate, UITableViewDataSource {

        init(_ parent: UITableViewRepresentable) {
           
        }

        func numberOfSections(in tableView: UITableView) -> Int {
            return self.parent.items.keys.count
        }

        func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
            return parent.items[section]?.count ?? 0
        }

        func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
           
          
            return tableViewCell
        }

        func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
          
        }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65673300

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档