如何通过 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