2017-12-28 7 views
1

im this in this and imは、3つのviewControllerを管理するpageViewControllerを介してviewControllerにいくつかの変数を渡そうとし、誰でも私を助けることができますか?ここPageViewControllerを介してviewControllerのデータをpageViewControllerの第2の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サービスへの呼び出しを行い、私のViewControllerは、これらのうちの2つを必要としますビューコントローラが表示されたときに、パラメータなどの変数...ので、動作しません...

これは

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



} 
私RootPageViewControllerクラスです

変数はこのクラスに直接渡され、私はそれらを印刷し、PageViewControllerを入力すると表示されますが、これをWebサービスへの呼び出しが動作するようにPageViewControllerの最初のviewController(principal1)にどのように渡しますか?

+0

[View Controller間でデータを渡す]可能な複製(https://stackoverflow.com/questions/5210535/passing-data-between-view-controllers) – the4kman

+0

@ the4kman私はviewControllerをインスタンス化してフィールドを渡しましたが、 –

答えて

0

いくつかの方法があります。

最も簡単な方法は、vc1、vc2、vc3をインスタンス化して、ビューコントローラに変数を渡すことです。

しかし、あなたのユースケースに基づいてクラスを構成します。たとえば、変数を保持するデータプロバイダを用意して、ページVCフロー全体(vc1、vc2、vc3を含む)がデータに必要なアクセス権を持つようにします。サブクラス、代理人によってそれを達成できます。

+0

私はviewControllerをインスタンス化し、変数を渡しても動作しません。 –

+0

「動作しません」ということを教えてください。いつ変数をロードしていますか? – Dillon

+0

私はpageViewControllerのfirstViewControllerクラスのviewDidLoadに変数を出力し、空のフィールドを表示します。初期化されているためですが、インスタンス化して送信します。 –

関連する問題