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

时间:2016-10-07 16:05:39

标签: ios swift visual-c++ storyboard viewcontroller

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


pass data

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

3 个答案:

答案 0 :(得分:2)

在故事板中为segue设置一个标识符(单击segue然后在右侧菜单上转到属性检查器),然后您可能需要单击单元格以在didSelectRowAt中创建segue,在那里:

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

然后创建segue函数

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

答案 1 :(得分:0)

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

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

App.myVar = "My DATA"

使用时可以使用App.myVar

答案 2 :(得分:0)

我一直试图解决这个问题。目前,我在调用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;
  }

}

它并不完美,但它提供了一种清楚地指定需要传递哪些数据的方法。