2017-09-19 7 views
0

Je suis nouveau sur iOS et j'ai actuellement 3 vues et je veux utiliser le geste de balayage pour naviguer entre eux. Balayage fonctionne. La vue bg rouge se charge d'abord comme je le veux, et le balayage fonctionne bien, mais appuyer sur le bouton Suivant ne fait rien. Quelqu'un pourrait-il me donner un indice? Je me rapproche de ce mal, mais cant semblent trouver l'aide sur googleUIPageViewController avec les contrôleurs ViewController

project

Dans mon projet, j'ai un MemberCardViewController qui gère la UIPageViewController:

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

Et pour l'instant, j'ai aussi créé un IdCardViewController qui correspond à la carte d'identité (vue sur fond rouge)

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

la question que je suis confronté est maintenant que w Lorsque le bouton Suivant est cliqué dans la carte d'identité, je veux charger la vue Infos sur le membre, mais pour le moment rien ne se passe quand on clique dessus. Cependant, j'ai mis en place des points d'arrêt dans la méthode loadViewController() de MemberCardViewController et je peux voir que l'application l'atteint quand on clique sur le bouton, mais la vue ne change pas en Member Info.

+0

ne pas avoir une idée du problème de votre code, pouvez-vous s'il vous plaît partager votre projet avec moi ([email protected]). Je vais jeter un oeil et vous mettre à jour – arunjos007

Répondre

1

Vous n'attribuez rien à la variable pvc de IdCardViewController. Ainsi, lorsque vous instanciez l'instance de IdCardViewController, vous devez affecter l'objet MemberCardViewController à la variable pvc. Bonne chance!

EDIT

changement

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

à

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

Ce qui est fait ici est, après instancier l'instance de IdCardViewController, un objet de MemberCardViewController (qui est self dans ce case) est affecté à la variable pvc. En outre, pour que ce code fonctionne, vous devez affecter la classe appropriée au contrôleur de vue "Carte d'identité" dans le storyboard. Pour ce faire, sélectionnez "Id Card" voir l'objet du contrôleur dans le storyboard, et changez sa classe à IdCardViewController dans "Identity Inspector". J'espère que cela aide!

+0

Pourriez-vous s'il vous plaît élaborer sur l'attribution de 'MemberCardViewController' lorsque IdCardViewController est instancié? Je ne peux pas savoir où écrire – JapanGuy

+0

@JapanGuy J'ai édité ma réponse, vérifiez si cela vous aide. –

+0

Merci pour votre réponse !!! C'est bien! – JapanGuy