Utiliser le button destinationViewController dans une section personnalisée

Mon objective est de faire un enstringment personnalisé avec une animation personnalisée comme suit: Je veux que le segue couvre un button du controleur sourceView avec un button du controleur destinationView avec un effet similaire à l'effet push du controller de navigation, ie le nouveau button est censé Poussez l'ancien button de droite à gauche.

J'ai été en mesure de faire disparaître l'ancien button (à partir du controleur sourceView) comme désiré:

[UIView animateWithDuration:1.0 animations:^{ // set the target frame for animated view sourceViewController.optionsButton.frame = leftButtonTargetFrame; } completion:^(BOOL finished) { [navigationController pushViewController:destinationViewController animated:NO]; // reset the button's frame back to its original frame sourceViewController.optionsButton.frame = leftButtonInitFrame; }]; 

Mais j'ai du mal à faire bouger le nouveau button (à partir du controleur de destination). La raison en est que je ne peux pas accéder aux éléments de la vue de destinationViewController : Pendant l'exécution de la section, ils ne sont pas instanciés. Et je ne peux pas animer un button qui n'est pas instancié.

Alors, comment puis-je replace un button dans le contrôle sourceViewController avec un button de la destinationViewController?

La vue du controller de vue de destination n'a pas été initialisée / chargée au moment où vous essayez d'accéder aux buttons. Pour charger l'affichage du controller de vue de destination, vous pouvez simplement accéder à la propriété d'affichage. Faites ceci avant d'utiliser les buttons: [destinationViewController view];

destinationViewController.view; fonctionnerait également, mais cela générerait un avertissement du compilateur.

Informations d'arrière-plan:

Si vous accédez à la propriété view et que sa valeur est actuellement nulle, le controller de vue appelle automatiquement la méthode loadView et renvoie la vue résultante.

La méthode loadView charge la vue que le controller gère. Vous ne devriez jamais appeler cette méthode directement.

Vous avez raison de ne pas pouvoir animer un object qui n'existe pas encore. Cependant, vous pouvez faire semblant.

  1. Créer un button de détenteur de place qui aura l'air identique au button qui sera dans le nouveau controller de vue.
  2. Animez-le au bon endroit.
  3. Lorsque le controller de vue de destination arrive, son button doit être invisible.
  4. Après que le controller de vue est en place (c'est-à-dire que le segue est terminé), le controller de vue de destination peut assurer le placement correct si son button et rendre son button réel visible.

J'espère que cela t'aides.