不能从UIViewController传递数据到UIPageViewController和其他视图。

问题描述 投票:0回答:1

我有一个连接点指向一个PageViewControler,他控制着两个ViewControlers,虽然我认为我的设置是正确的,我可以顺利地运行它,但我不能将数据传递到其他两个视图。我错过了什么?总之,这是我从一个单元格指向一个PageViewControler的转折点。

   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 }}

我的PageViewControler。

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... 

}

我不得不删掉了大部分代码,但你明白我的意思了。谅谅

ios swift uiviewcontroller delegates uipageviewcontroller
1个回答
1
投票

基本上...

在你的类中,实例化并切换到你的页面视图控制器,在那里设置属性,然后在各自的控制器中设置它们。

假设 "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...

}
© www.soinside.com 2019 - 2024. All rights reserved.