ios - 从 UIHostingViewController 呈现 UIViewController
问题描述
我开始从 to 重建我的应用Swift
程序SwiftUI
。
我有一个UIViewController
使用UIPresentationController
并具有我想按原样使用的自定义拖动手势(现在)。
我试图弄清楚我是否能够从我的SwiftUI
视图中呈现这个。
以下是我导航到 SwiftUI 视图的方式:
let dataStore = DataStore()
let vc = Host(rootView: SwiftUIView(store: dataStore))
self.navigationController?.pushViewController(vc, animated: true)
呈现我的控制器的方法在我的 DataStore 中。
这是我正在尝试的:
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,我可以看到我的数据并使用拖动手势。
解决方案
现在,您正在创建一个新的Host
并SwiftUIView
尝试从它们中呈现。但是,它们不是视图层次结构的一部分,因此不会显示任何内容。
相反,您可能希望将引用传递给您的实际视图控制器。此代码不完整,因为您没有包含所有内容的定义,但它应该可以帮助您入门:
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)
}
}
推荐阅读
- webview - 在 VStack 中包装 WebView 时出错:无法推断复杂的闭包返回类型;添加显式类型以消除歧义
- javascript - 如何使用 Javascript 中的函数来构建交互式文本?
- javascript - MVC JS deletethisproduct 未在 HTMLAnchorElement.onclick 中定义(VM457 索引:40)
- angular - 如何在@angular/google-maps infoWindow 中显示动态内容
- function - 基于 Actor 的模型相关的多个问题
- asp.net - 使用 GraphServiceClient 检索 Azure 广告成员的组信息
- azure-web-app-service - 允许 Azure Web App 访问 VM 上的数据库,而无需将该 VM 暴露给外界
- css - 如何在一个 flexbox 中上下对齐项目?
- python - Python Capn Proto:恢复者?
- kubernetes - 使用补丁从节点中删除标签