如何在swift中在这两个视图控制器之间传递数据

在这种情况下,我有两个VC之间的tabbar控制器和导航控制器,这意味着首先我想在第一个VC和tabbar控制器之间传递数据,其次我想要从标签栏控制器传递相同的数据到导航控制器,并最终到最后一个VC,我search例如在networking,但我没有发现任何有用的东西。

传递数据

请帮助我在这两个视图控制器之间传递数据,任何例子都会很棒,thaank的。

在storyboard中为segue设置一个标识符(点击segue,然后在右侧菜单中转到属性检查器),然后您可能需要单击单元格以在didSelectRowAt ,在此执行以下操作:

 self.performSegue(withIdentifier: "YOUR IDENTIFIER", sender: DATA TO PASS or nil) 

然后创buildsegue函数

 override func prepare(for segue: UIStoryboardSegue, sender: Any!){ if (segue.identifier == "YOUR IDENTIFIER") // good to have if you have multiple segues { let secondVC = segue.destination as! SecondViewController secondVC.str = "DATA" // now you can access public variables and functions from the second viewController } } 

您可以使用@Rashwan L答案,并将所有控制器之间的信息传递给最后一个,或者只需在AppDelegate中创build一个variables,并在需要的控制器到达时使用它。

 var App: AppDelegate { return (UIApplication.sharedApplication().delegate as! AppDelegate) } 

App.myVar = "My DATA"

使用时可以使用App.myVar

我一直在试图弄清楚这一点。 目前,我创build一个属性来保存我想要传递的数据,在我调用performSelector:之前,然后使用该属性将数据传递到prepareForSegue:的相应视图控制器。 使用后,我将数据清空。 看起来像这样

 @property (...) NSString *selectedString; - (void)methodThatPicksTheData { self.selectedString = @"someString"; [self performSegue:kSegueIdentifier]; } - (void)prepareForSegue:(SegueClassWhoseNameICannotRememberRightNow)segue { if ([segue.identifier isEqualToString:kSegueIdentifier]) { CustomViewController *vc = segue.destinationViewController; vc.string = self.selectedString; self.selectedString = nil; } } 

它并不完美,但它提供了一种方式来清楚地指定哪些数据需要通过。