ビュー間でデータを適切に渡すことに問題がありますが、標準的な方法ではありません。
私の問題を説明する写真:
I performSegueWithIdentifier 2つのセグエ識別子のいずれかを使用して、「Firmy」または「Oddzialy」と呼ばれるデータをViewControllerに渡します。
データコードの受け渡し:
- (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] segueのdestinationViewControllerはNavigationViewControllerであるため。
では、データを渡し、独立したナビゲーションコントローラーを使用する適切な方法は何でしょうか。
UINavigationController
にはtopViewController
というプロパティがあり、スタックの最上位にあるViewControllerを返します。
だからあなたの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...
}
ここにそれは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...
}