2013-09-03 7 views
1

Je suis un débutant dans xcode et j'apprends toujours ses bases. Si ma question me semble trop élémentaire, s'il vous plaît, gardez-moi.Basculer entre les UIviews dans Xcode

J'ai une vue, ce qui est ma vue principale. Lorsque l'utilisateur clique sur un bouton (bouton Options), je veux passer à une seconde vue. Ici, l'utilisateur peut sélectionner une option parmi plusieurs disponibles.

Une fois que l'utilisateur a sélectionné son option, je veux renvoyer cette valeur à la première vue et reprendre le traitement de l'endroit où il était (lorsque l'utilisateur a cliqué sur le bouton Options).

Important - L'utilisateur passera de view1 à view2 en cours de traitement. Je dois revenir de view2 à view1 et reprendre exactement où je m'étais arrêté ... cela signifie, j'ai besoin de toutes les valeurs variables pour être disponible.

+0

XCode est le SDK. Objective-C est la langue. – CaptJak

Répondre

0

Un Segue push ne crée pas une nouvelle version de la vue parent manette. Commencez-vous le traitement de session dans viewDidLoad ou dans viewDidAppear/viewWillAppear? Arrêtez-vous le traitement dans viewWillDisappear? En viewWillDisappear, vous pouvez vérifier la pile du contrôleur de navigation pour voir si votre vue parent a été couvert ou est sauté de la pile en utilisant cet extrait de code:

- (void)viewWillDisappear:(BOOL)animated { 

    if ([[[self navigationController] viewControllers] indexOfObject:self] == NSNotFound) { 
     // we are disappearing. Clean up the session. 
     ... 
    } 
    [super viewWillDisappear:animated]; 
} 

Vous pouvez stocker (quantités limitées de) état dans la vue contrôleur, en utilisant la méthode de UIViewController encodeRestorableStateWithCoder: - vérifiez la documentation. Je ne l'utilise pas moi-même mais ça pourrait aider.

Par ailleurs, vous trouverez peut-être plus facile à utiliser de UIViewController fait:, reset: et canPerformUnwindSegueAction: fromViewController: withSender: plutôt que de créer des protocoles de délégués.Les segues Unwind ont été introduites dans iOS 6 et nécessitent moins de code que les délégués.

+0

Un seque poussoir ne créera pas une nouvelle version du contrôleur de vue, mais instanciera la vue de destination avant de l'afficher. C'était mon problème. Il semble, canPerformUnwindSegueAction: fromViewController: withSender est le moyen d'aller de l'avant. Merci de l'avoir suggéré. Je lui ai donné un coup de feu et ça marche super! – user2734323

0

Facile! Tout ce que vous avez à faire est de contrôler le glisser de votre UIButton vers la nouvelle vue. Sélectionnez Modal.

enter image description here

+0

Hmm ... Ça ne va pas aider. Le problème est que, quand je reviens en voir un, ma session ne reprendra pas à la place elle recommence depuis le début ... Juste pour vous donner une idée, l'utilisateur passera de l'écran 1 à l'écran 2 au milieu du traitement . Par conséquent, il est important que je devrais être capable de reprendre d'où je suis parti ... y compris toutes les variables instantanées .... – user2734323

+0

@ user2734323 Essayez d'intégrer votre premier contrôleur de vue dans un contrôleur de navigation et de faire une séquence de poussée –

+0

Essayé que .. mais cela créera toujours une nouvelle instance du contrôleur de vue. – user2734323

0

On dirait que vous avez besoin de mettre en œuvre un délégué. Je ne suis pas le meilleur à expliquer les protocoles et les délégués, alors je vais fournir des liens qui en parlent. Je vais fournir une mise en œuvre approximative ci-dessous.

Protocoles https://developer.apple.com/library/ios/documentation/cocoa/conceptual/ProgrammingWithObjectiveC/WorkingwithProtocols/WorkingwithProtocols.html

délégués https://developer.apple.com/library/ios/documentation/general/conceptual/CocoaEncyclopedia/DelegatesandDataSources/DelegatesandDataSources.html#//apple_ref/doc/uid/TP40010810-CH11

différence entre les deux Difference between protocol and delegates?

View2.h

@protocol View2; 

@interface View2 : UIViewController 

@property (nonatomic, weak) id<View2Delegate> *delegate; 

... 

@end 

@protocol View2Delegate 

-(void)view2Finished:(NSString *)value; 

@end 

View2.m

@synthesize delegate 

-(void)backButtonPressed 
{ 
    [delegate view2Finished:@"Value to be passed to view 1"]; 
} 

View1.h

// This code says that View1 implements View2Delegate 
@interface View1 : UIViewController<View2Delegate> 

View1.m

-(void)view2Finished:(NSString *)value 
{ 
    NSLog(@"Value received from view 2: %@", value); 
} 
Questions connexes