IOS раскадровка передачи данных navigationViewController
У меня проблема с правильной передачей данных между представлениями, но не стандартным способом.
Изображение, описывающее мою проблему:
![http://i.stack.imgur.com/0jHYC.png]()
I выполнитьSegueWithIdentifier с одним из двух идентификаторов segue, а затем я хочу передать данные в ViewController под названием "Firmy" или "Oddzialy".
Передача кода данных:
- (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];
}
}
Проблема заключается в методе [segue destinationViewController], поскольку destinationViewController для segue - это NavigationViewController.
Итак, каков правильный способ передачи данных и наличия независимых навигационных контроллеров?
Ответы
Ответ 1
UINavigationController
имеет свойство, называемое topViewController
, которое возвращает контроллер представления, расположенный в верхней части стека.
Итак, ваш метод prepareForSegue:
может выглядеть примерно так:
- (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...
}
Ответ 2
Здесь это быстро:
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...
}