从 UIHostingViewController 呈现 UIViewController

Posted

技术标签:

【中文标题】从 UIHostingViewController 呈现 UIViewController【英文标题】:Present a UIViewController from a UIHostingViewController 【发布时间】:2021-06-17 21:54:48 【问题描述】:

我开始将我的应用程序从Swift 重建为SwiftUI

我有一个UIViewController,它是使用UIPresentationController 构建的,并且有我想按原样使用的自定义拖动手势(目前)。

我正在尝试确定是否可以从我的 SwiftUI 视图中展示此内容。

这是我导航到 SwiftUI 视图的方式:

let dataStore = DataStore()
let vc = Host(rootView: SwiftUIView(store: dataStore))
self.navigationController?.pushViewController(vc, animated: true)
 

显示我的控制器的方法在我的数据存储中。

这是我正在尝试的:

func displayDetailController(forData data: Data?) 
     let height = // I set a custom height here as I can drag 
     //this view to pop to the middle, to the top, or dismiss
     guard let dat = data else  return 
     let const = DetailViewController.Constructor(data: dat)
     let vc = DetailViewController.loadFromNib(constructor: const, height: height) 
        
     let hostingController = Host(rootView: SwiftUIView(store: self))
     hostingController.navigationController?.present(vc, animated: true)

我有一个Button,点击它会调用displayDetailController,但没有任何反应。

目标是我的 DetailViewController,我可以看到我的数据并使用拖动手势。

【问题讨论】:

【参考方案1】:

现在,您正在创建一个新的 HostSwiftUIView 并尝试通过它们进行演示。但是,它们不是视图层次结构的一部分,因此不会显示任何内容。

相反,您可能希望将引用传递给您的实际 视图控制器。此代码不完整,因为您没有包含所有内容的定义,但它应该可以帮助您入门:

let dataStore = DataStore()
dataStore.navigationController = self.navigationController
let vc = Host(rootView: SwiftUIView(store: dataStore))
self.navigationController?.pushViewController(vc, animated: true)
class DataStore 
  var navigationController : UINavigationController?

  // other code

  func displayDetailController(forData data: Data?) 
     let height = 100
     guard let dat = data else  return 
     let const = DetailViewController.Constructor(data: dat)
     let vc = DetailViewController.loadFromNib(constructor: const, height: height) 
     self.navigationController?.present(vc, animated: true)
  

【讨论】:

哈,不敢相信我忽略了这一点。非常感谢。当 SO 允许我在几分钟内勾选时,我会勾选它。谢谢!

以上是关于从 UIHostingViewController 呈现 UIViewController的主要内容,如果未能解决你的问题,请参考以下文章

如何从 SwiftUI 推送到现有的 UINavigationController 堆栈?

从 NIB 与从代码加载自定义滑块:从代码加载时不存在子视图

如何从其他面板从 JTextField 获取输入

从PRISM开始学WPFMVVMViewModel?

在 python 中,为啥从数组读取比从列表读取慢?

从图库中挑选或从相机捕获的高质量图像