ios - 无法将数据从 UIViewController 传递到 UIPageViewController 和其他视图
问题描述
我有一个指向 PageViewControler 的 segue,它控制两个 ViewControler,虽然我认为我已经正确设置并且可以顺利运行它,但我无法将数据传递给其他两个视图。我错过了什么?
无论如何,这是我从单元格指向 PageViewControler 的 segue:
class HomeViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {
if segue.identifier == "showDetails" {
let localDetails = segue.destination as! localDetails
let IndexPath = self.tableView.indexPathForSelectedRow!
let row = IndexPath.row
tableView.deselectRow(at: IndexPath, animated: true)
localDetails.index = row
let singleLocalInfo = restaurants[row]
localDetails.localName = singleLocalInfo.locale }}
我的页面视图控制器:
class PageViewController: UIPageViewController, UIPageViewControllerDelegate, UIPageViewControllerDataSource {
func newVc(viewController: String) -> UIViewController {
return UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: viewController)
}
lazy var orderedViewControllers: [UIViewController] = {
return [self.newVc(viewController: "localDetails"),
self.newVc(viewController: "blueScreen")]
}() etc,etc... }
最后是我需要显示数据的 viewControler:
class localDetails: UIViewController {
var localName: String = ""
etc...
}
我不得不削减大部分代码,但你明白了。谢谢
解决方案
基本上...
在您的实例化和 segues 到您的页面视图控制器的类中,在那里设置属性,然后在它们各自的控制器中设置它们。
假设“showDetails”是您的页面视图控制器的 segue 标识符:
class HomeViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "showDetails" {
let pageVC = segue.destination as! PageViewController
let IndexPath = self.tableView.indexPathForSelectedRow!
let row = IndexPath.row
tableView.deselectRow(at: IndexPath, animated: true)
pageVC.index = row
let singleLocalInfo = restaurants[row]
pageVC.localName = singleLocalInfo.locale
pageVC.blueValue = "the value for blueScreen"
}
}
}
class PageViewController: UIPageViewController, UIPageViewControllerDelegate, UIPageViewControllerDataSource {
var index: Int = 0
var localName: String = ""
var blueValue: String = ""
func newVc(viewController: String) -> UIViewController {
return UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: viewController)
}
lazy var orderedViewControllers: [UIViewController] = {
let v1 = self.newVc(viewController: "localDetails")
v1.localName = self.localName
let v2 = self.newVc(viewController: "blueScreen")
v2.blueValue = self.blueValue
return [v1, v2]
}()
//etc,etc...
}
推荐阅读
- javascript - 传递 data-id 在 JS 函数中不起作用
- javascript - 事件侦听器不适用于某些 HTML 元素
- javascript - 如何使用 Javascript 从多个 div 元素中识别视口中的哪个 div 元素(或显示在屏幕上)?
- ruby - 数组.map!从 0 以外的索引开始
- ansible - jinja2 selectattr() 中键的正则表达式匹配
- php - 抽象类中的 Db 连接错误 - 有人帮我找到错误吗?
- pine-script - 为什么这个总和不适用于纽约证券交易所 1 个月的高/低数据?
- python - 将具有相同列值的 DataFrame 行加在一起,但保留顺序
- python - 负维度和模块keras.backend没有属性常见错误
- python - scipy中密集线性方程组的稀疏解