【问题标题】:how to pass data between these two view controllers in swift如何在这两个视图控制器之间快速传递数据
【发布时间】:2017-02-16 16:59:14
【问题描述】:

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


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

【问题讨论】:

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


    【解决方案1】:

    在情节提要中为 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
        }
    }
    

    【讨论】:

    • sender: The object that initiated the segue. You might use this parameter to perform different actions based on which control (or other object) initiated the segue. 这不应该用来传递数据
    【解决方案2】:

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

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

    App.myVar = "My DATA"

    使用时可以通过App.myVar获得

    【讨论】:

    • 通过应用委托创建一个全局可访问的变量是一种非常糟糕的使用模式。
    【解决方案3】:

    我一直试图弄清楚这一点。目前,我在调用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;
      }
    
    }
    

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

    【讨论】:

      猜你喜欢
      • 2012-07-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多