2011-09-29 1 views
6

Durante l'implementazione di un passaggio tra due controller di vista come modificare una proprietà del controller di visualizzazione di destinazione utilizzando l'oggetto segue? La documentazione dice che questo può essere fatto all'interno di prepareForSegue: mittente: metodo. l'ho provato ma non ho avuto successoiOS 5 segue implementazione

risposta

13

Non so se hai ancora bisogno di una risposta a questo, ma era un post così solitario, e se ho ragione, questo non ricade più sotto NDA. Se mi sbaglio, per favore modera la mia risposta nel dimenticatoio, quindi eccoci qui: ho appena finito di fare qualcosa che usa ciò di cui hai bisogno. Questo è il codice che funziona per me:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    if ([[segue identifier] isEqualToString:@"relevantSegueIdentifier"]) 
    { 
     // [segue destinationViewController] is read-only, so in order to 
     // write to that view controller you'll have to locally instantiate 
     // it here: 
     ViewController *upcomingViewController = [segue destinationViewController]; 

     // You now have a solid reference to the upcoming/destination view 
     // controller. Example use: Allocate and initialize some property of 
     // the destination view controller before you reach it and inject a 
     // reference to the current view controller into the upcoming one: 
     upcomingViewController.someProperty = [[SomePropertyClass alloc] initWithString:@"Whatever!"]; 
     upcomingViewController.initialViewController = [segue sourceViewController]; 
     // Or, equivalent, but more straightforward: 
     //upcomingViewController.initialViewController = self; 
    } 
} 

Questo presuppone che sia someProperty e initialViewController sono sintetizzate di accesso del controller della vista di destinazione. Spero che questo ti aiuti!

+0

cade sotto NDA ma in 3 giorni non sarà l'uscita ufficiale è il 14 ottobre, ma mi piace la risposta + –

+0

Ho provato quello che dici ma le proprietà sul mio 'destinationViewController' non aggiorna . Qualche consiglio? – Francesco

+0

Suppongo che tu usi un accessorio sintetizzato (non un ivar privato) del controller di visualizzazione di destinazione e che il controller di visualizzazione sia già istanziato durante l'installazione dell'app (ad esempio lo storyboard con i controller di vista effettivi posizionati in esso, un passaggio tra di loro tutti istanziati @ app lanciare). In tal caso, dovrebbe funzionare. Potrebbe quindi essere qualcosa di simile al sistema che non conosce la tua destinazione specifica. guarda la classe del controller. La classe ViewController nel mio esempio è una sottoclasse di UIViewController e prima di @implementation faccio qualcosa come "#import" ViewController.h "". Potrebbe essere una di queste cose? – DarqueSandu

0

Quello che uso nel controller della vista origine è:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    UIViewController *upcomingViewController = [segue destinationViewController]; 
    upcomingViewController.view.tag = [[segue identifier] hash]; 
} 

E poi nel controller della vista di destinazione che uso (uso ad esempio nel viewDidAppear)

if(self.view.tag == [@"MySeqgueIdentifier" hash]) 
{ 
    // Do something here... 
} 

Questo è cool, dal momento che non è necessario creare proprietà ecc. e tutto funziona direttamente dal generatore di interfacce.