2017-09-19 5 views
0

Ich bin neu in iOS und habe derzeit 3 ​​Ansichten und möchte die Wischgeste verwenden, um zwischen ihnen zu navigieren. Swiping funktioniert. Die rote bg-Ansicht lädt zuerst, wie ich es will, und das Wischen funktioniert gut, aber das Tippen auf die Schaltfläche Weiter macht nichts. Könnte mir bitte jemand einen Hinweis geben? Ich nähere mich das falsch, aber kann nicht scheinen, jede Hilfe auf GoogleUIPageViewController mit untergeordneten ViewControllern

project

In meinem Projekt zu finden habe ich eine MemberCardViewController, die die UIPageViewController Griffe:

class MemberCardViewController: UIPageViewController, UIPageViewControllerDataSource, UIPageViewControllerDelegate { 

    lazy var viewArray: [UIViewController] = { 

     return [self.ViewControllerInstance(name: "CalendarView"), 
       self.ViewControllerInstance(name: "IdCardView"), 
       self.ViewControllerInstance(name: "MemberInfoView")] 
    }() 

    private func ViewControllerInstance(name: String) -> UIViewController { 
     return UIStoryboard(name: "MemberCardViewController", bundle: nil).instantiateViewController(withIdentifier: name) 
    } 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     self.dataSource = self 
     self.delegate = self 
     loadViewController(viewPosition: 1) 
    } 

    func loadViewController(viewPosition: Int) { 
     if let viewController = viewArray.get(at: viewPosition) { 
      setViewControllers([viewController], direction: .forward, animated: true, completion: nil) 
     } 
    } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
     // Dispose of any resources that can be recreated. 
    } 
} 
... 

Und jetzt habe ich auch erstellt ein IdCardViewController die

class IdCardViewController: UIViewController { 

    var pvc = MemberCardViewController() 

    @IBAction func loadRight(_ sender: Any) { 
     pvc.loadViewController(viewPosition: 2) 
    } 
    override func viewDidLoad() { 
     super.viewDidLoad() 
     // Do any additional setup after loading the view. 
    } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
     // Dispose of any resources that can be recreated. 
    } 
} 

Das Problem, das ich mit Blick auf bin jetzt entspricht, ist auf der ID-Karte (roter Hintergrund Ansicht), dass w Wenn die Schaltfläche Weiter in der ID-Karte angeklickt wird, möchte ich die Ansicht "Mitgliederinformationen" laden, aber im Moment passiert nichts, wenn darauf geklickt wird. Allerdings habe ich Breakpoints in MemberCardViewControllers loadViewController() Methode eingerichtet und kann sehen, dass die App es erreicht, wenn auf die Schaltfläche geklickt wird, jedoch ändert sich die Ansicht nicht zu Member Info.

+0

erhalten Sie keinen Hinweis auf das Problem von Ihrem Code, können Sie bitte Ihr Projekt mit mir teilen ([email protected]). Ich werde einen Blick darauf werfen und Sie aktualisieren – arunjos007

Antwort

1

Sie geben der pvc-Variablen von nichts zu. Wenn Sie also die Instanz IdCardViewController instanziieren, sollten Sie das Objekt MemberCardViewController der Variablen pvc zuweisen. Viel Glück!

EDIT

ändern

private func ViewControllerInstance(name: String) -> UIViewController { 
     return UIStoryboard(name: "MemberCardViewController", bundle: nil).instantiateViewController(withIdentifier: name) 
    } 

zu

private func ViewControllerInstance(name: String) -> UIViewController { 
     if name == "IdCardView" 
     { 
      if let vc = UIStoryboard(name: "MemberCardViewController", bundle: nil).instantiateViewController(withIdentifier: name) as? IdCardViewController { 
       vc.pvc = self 
       return vc 
      } 

     } 
     return UIStoryboard(name: "MemberCardViewController", bundle: nil).instantiateViewController(withIdentifier: name) 
    } 

Was hier geschehen ist, nachdem die Instanz von IdCardViewController instanziiert wird, um ein Objekt von MemberCardViewController (die self in diesem Fall) wird pvc Variable zugewiesen. Damit dieser Code funktioniert, müssen Sie die richtige Klasse für den Ansichtscontroller "ID-Karte" im Storyboard zuweisen. Wählen Sie dazu "ID-Karte", um das Objekt des Controllers im Storyboard anzuzeigen, und ändern Sie die Klasse in "Identity Inspector" in "IdCardViewController". Hoffe, das hilft!

+0

Könnten Sie bitte die Zuweisung von 'MemberCardViewController' bei der Instanziierung von IdCardViewController erläutern? Ich kann nicht herausfinden, wo ich was schreiben soll – JapanGuy

+0

@JapanGuy Ich habe meine Antwort bearbeitet, überprüfen Sie, ob es Ihnen hilft. –

+0

Vielen Dank für Ihre Antwort !!! Das ist toll! – JapanGuy

Verwandte Themen