2009-07-18 4 views
0

Je suis en train de recharger une valeur que je mets sur UIViewController de mettre à jour chaque fois que je transition avec ce code (aller et venir sont les deux UIViewControllers):Comment recharger une UIViewController sur l'iPhone

coming.phoneNumber = aPhoneNumber; 
    [coming viewWillAppear:YES]; 
[going viewWillDisappear:YES]; 
[going.view removeFromSuperview]; 
[self.window insertSubview: coming.view atIndex:0]; 
[going viewDidDisappear:YES]; 
[coming viewDidAppear:YES]; 

lorsque la la valeur du numéro de téléphone change dans la vue à venir, elle n'apparaît jamais lorsque la vue est insérée dans la sous-vue. Comment afficher le numéro de téléphone mis à jour?

Répondre

1

Vous devriez obtenir le comportement que vous voulez en modifiant les attributs de UIViewController seulement après que l'UIView qu'il représente ait été chargé:

[coming viewWillAppear:YES]; 
[going viewWillDisappear:YES]; 
[going.view removeFromSuperview]; 
[self.window insertSubview:coming.view atIndex:0]; 
coming.phoneNumber = aPhoneNumber; 
[going viewDidDisappear:YES]; 
[coming viewDidAppear:YES];

Dans le code ci-dessus, la venue UIViewController a été chargé, mais le UIView qu'il représente n'est pas chargé jusqu'à ce qu'il soit accessible pour la première fois par coming.view. Cela est expliqué dans le documentation for UIViewController:

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

Vous pouvez déterminer si un UIView a été chargé via la méthode -isViewLoaded de UIViewController.

+0

insertView: atIndex: ne charge pas une vue, il ajoute une vue déjà instanciée à une hiérarchie de vues. –

+0

J'ai fait quelques recherches et mis à jour mon article selon le cas. – titaniumdecoy

0

Je suppose que phoneNumber est un NSString. Vous devez vous rappeler qu'il y a une distinction entre quelque chose qui est affiché sur l'écran et l'objet qui le soutient. Un UITextField montrant une valeur particulière n'est pas la même chose que NSString dont il a obtenu cette valeur, et lorsque vous changez de NSString, vous devez changer la valeur de UITextField si vous voulez qu'il soit affiché.

Sauf si vous avez une implémentation personnalisée de setPhoneNumber: en venant ou en utilisant KVO pour observer la valeur, il n'y a aucun moyen d'afficher la vue avec le numéro de téléphone sait pour mettre à jour ce qui est sur l'écran.

Il semble que vous essayez d'implémenter UINavigationController ou UITabBarController. Si possible, vous devriez simplement utiliser l'un d'entre eux, plutôt que d'essayer de gérer toute la transition vous-même. Ils prennent soin d'attacher et de détacher des vues, d'appeler (Did/Will) (Appeaer/Disappear), etc.

Questions connexes