从 UIHostingViewController 呈现 UIViewController
Present a UIViewController from a UIHostingViewController
我开始重建我的应用程序,从 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)
}
}
我开始重建我的应用程序,从 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)
}
}