如何通过 PageViewController 将 viewController 的数据传递给 pageViewController 的第二个 ViewController

Posted

技术标签:

【中文标题】如何通过 PageViewController 将 viewController 的数据传递给 pageViewController 的第二个 ViewController【英文标题】:how to pass data for a viewController through a PageViewController to a second ViewController of the pageViewController 【发布时间】:2017-12-28 23:05:52 【问题描述】:

我是新手,我试图通过管理 3 个 viewController 并在 3 个控制器中使用这些变量的 pageViewController 为 viewController 传递一些变量,有人可以帮助我吗?

这是我在 swift 上的代码...

我用这个发送我的变量:

public var lenguaje = ""
public var username = ""
public var indice = ""
public var password = ""

  if segue.identifier == "loginPage" 
        let destino = segue.destination as! RootPageViewController
        destino.lenguaje=lenguaje
        destino.username = self.txtUsuario.text!
        destino.indice = indice
        destino.password = self.txtPassword.text!

当我这样做时,调用 Web 服务的视图控制器需要其中两个变量,例如参数...所以当视图控制器出现时,它不起作用...

这是我的 RootPageViewController 类

class RootPageViewController: UIPageViewController, UIPageViewControllerDataSource, UIPageViewControllerDelegate 

public var lenguaje = ""
public var username = ""
public var indice = ""
public var password = ""

lazy var viewControllerList: [UIViewController] = 

    let sb = UIStoryboard(name: "Main" , bundle: nil)

    let vc1 = sb.instantiateViewController(withIdentifier: "principal1") //this is well done
    let vc2 = sb.instantiateViewController(withIdentifier: "Principal2")
    let vc3 = sb.instantiateViewController(withIdentifier: "Principal3")

    return [vc1,vc2,vc3]


()

func pageViewController(_ pageViewController: UIPageViewController, viewControllerBefore viewController: UIViewController) -> UIViewController? 

    guard let vcIndex = viewControllerList.index(of: viewController) else  return nil

    let previo = vcIndex - 1

    guard previo >= 0 else return nil

    guard viewControllerList.count > previo else return nil

    return viewControllerList[previo]



func pageViewController(_ pageViewController: UIPageViewController, viewControllerAfter viewController: UIViewController) -> UIViewController? 

    guard let vcIndex  = viewControllerList.index(of: viewController) else return nil

    let next = vcIndex + 1

    guard viewControllerList.count != next else return nil

    guard viewControllerList.count > next else return nil

    return viewControllerList[next]



override func viewDidLoad() 
    super.viewDidLoad()

    self.dataSource = self

    if let firstViewController = viewControllerList.first
        self.setViewControllers([firstViewController], direction: .forward, animated: true, completion: nil)
    



    // Do any additional setup after loading the view.





变量直接传递给这个类,我打印它们并在我进入PageViewController时显示它们,但是我如何将它们从这里传递给PageViewController的第一个viewController(principal1)以便调用webservice有效吗?

【问题讨论】:

Passing Data between View Controllers的可能重复 @the4kman 我确实实例化了 viewController 并传递了字段,但它不起作用 【参考方案1】:

有几种方法。

最简单的方法是在实例化 vc1、vc2、vc3 时,将变量传递给视图控制器。

但是,我会根据您的用例来构建类。例如,拥有一个保存您的变量的数据提供程序,因此您的整个页面 VC 流(包括 vc1、vc2、vc3)可以对数据进行必要的访问。您可以通过子类、委托来实现。

【讨论】:

我尝试实例化 viewController 并传递变量,但它不起作用 你能详细说明“不起作用”吗?你什么时候加载变量? 我在 pageViewController 的 firstViewController 类的 viewDidLoad 中打印变量并显示空字段,因为它们已“”初始化,但我将它们与实例化一起发送。 我应该在哪里加载变量?

以上是关于如何通过 PageViewController 将 viewController 的数据传递给 pageViewController 的第二个 ViewController的主要内容,如果未能解决你的问题,请参考以下文章

(Swift) 如何使用触摸按钮更改 pageviewcontroller 中的视图

你如何将数据从 ViewController 传递到包含单独 ViewController 的 PageViewController,然后这些 ViewController 将使用这些数据?

Swift:如何将数据传递给嵌入在 ContainerView 中的 PageViewController?

iOS:如何在 PageViewController 的 ViewController 中使用 segue

如何将参数从容器视图的父 ViewController 传递到该容器视图的 PageViewController?

如何在 PageViewController 和 ViewController 之间传递数据?