iOS storyboard passing data navigationViewController

11,514

Solution 1

UINavigationController has a property called topViewController which returns the view controller that is at the top of the stack.

So your prepareForSegue: method may look something like this...

- (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...
}

Solution 2

Here it is in swift:

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...
}
Share:
11,514
sliwinski.lukas
Author by

sliwinski.lukas

Updated on June 10, 2022

Comments

  • sliwinski.lukas
    sliwinski.lukas about 2 years

    I have problem with proper passing data between view's but not in standard way.

    Picture describing my problem:

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

    I performSegueWithIdentifier with one of two segue identifiers and then in I want to pass data to ViewController called "Firmy" or "Oddzialy".

    Passing data code:

    - (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];
      }
    }
    

    Problem is with method [segue destinationViewController] becouse destinationViewController for segue is NavigationViewController.

    So what is proper way to pass data and have independent Navigation Controllers?