2011-12-08 11 views
31

Ho problemi con i dati di passaggio corretti tra le visualizzazioni ma non in modo standard.Storyboard iOS che passa i dati di navigazioneViewController

Immagine che descrive il mio problema:

http://i.stack.imgur.com/0jHYC.png

ho performSegueWithIdentifier con uno dei due identificatori Segue e poi in voglio passare i dati al ViewController chiamato "Firmy" o "oddziały" .

passante cod dati:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    if ([[segue identifier] isEqualToString:@"sLogowanieFirmy"]) { 
     FirmyVC *firmyVC = [segue destinationViewController]; 
     firmyVC.tabFirmy = self.tabFirmy; 
    } 
    if ([[segue identifier] isEqualToString:@"sLogowanieOddzialy"]) { 
     OddzialyVC *oddzialyVC = [segue destinationViewController]; 
     oddzialyVC.wybranaFirma = [self.tabFirmy objectAtIndex:0]; 
    } 
} 

problema è con il metodo [destinationViewController segue] siccome destinationViewController per segue è NavigationViewController.

Quindi, qual è il modo corretto per passare i dati e disporre di controller di navigazione indipendenti?

+0

forse si vuole dare uno sguardo alla classe 'NSNotificationCenter'. http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/nsnotificationcenter_Class/Reference/Reference.html – Dimme

+0

Non esiste un modo più conveniente? –

risposta

58

UINavigationController ha una proprietà denominata topViewController che restituisce il controller di visualizzazione che si trova in cima allo stack.

Così il vostro metodo di prepareForSegue: può sembrare qualcosa di simile ...

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    if ([[segue identifier] isEqualToString:@"sLogowanieFirmy"]) { 
     UINavigationController *nav = [segue destinationViewController]; 
     FirmyVC *firmyVC = (FirmyVC *)nav.topViewController; 
     firmyVC.tabFirmy = self.tabFirmy; 
    } 

    // etc... 
} 
+1

Questo è esattamente quello che stavo cercando. Grazie! Mi hai salvato il tempo. –

3

Qui è in rapida:

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) 
{  
    if (segue.identifier == "sLogowanieFirmy") { 
     let nav = segue.destinationViewController as! UINavigationController 
     let firmyVC = nav.topViewController as! FirmyVC 
     firmyVC.tabFirmy = self.tabFirmy    
    } 

    // etc... 
} 
Problemi correlati