Ios 无法将数据从UIViewController传递到UIPageViewController和其他视图
我有一个segue指向一个PageViewControlr,它控制两个ViewControls,虽然我认为它设置正确并且可以顺利运行,但我无法将数据传递给其他两个视图。 我错过了什么?Ios 无法将数据从UIViewController传递到UIPageViewController和其他视图,ios,swift,uiviewcontroller,delegates,uipageviewcontroller,Ios,Swift,Uiviewcontroller,Delegates,Uipageviewcontroller,我有一个segue指向一个PageViewControlr,它控制两个ViewControls,虽然我认为它设置正确并且可以顺利运行,但我无法将数据传递给其他两个视图。 我错过了什么? 无论如何,这是我从一个单元格指向一个PageViewController的序列: class HomeViewController: UIViewController, UITableViewDelegate, UITableViewDataSource { if segue.identifie
无论如何,这是我从一个单元格指向一个PageViewController的序列:
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... }
我的PageViewController:
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... }
最后是需要显示数据的ViewControlr:
class localDetails: UIViewController {
var localName: String = ""
etc...
}
我不得不删掉大部分代码,但你明白了。
谢谢基本上
在实例化和分段到页面视图控制器的类中,在那里设置属性,然后在各自的控制器中设置属性
假设“showDetails”是页面视图控制器的序列标识符:
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...
}
检查委派和闭包以获取pas数据我做了,但据我所知,委派是用于返回数据的。
tableView.deselectRow(at:IndexPath,animated:true)
为什么调用此函数?哦,这只是为了获得所选行的索引号。嗨,DonMago,感谢您的帮助。一开始它不起作用,但当我添加“as!localDetails”时,它设法传递数据。:)谢谢