当在第二个选项卡中定义var时,使变量可用于第一个选项卡

时间:2016-04-14 21:16:18

标签: swift tabs

当我在第一个标签中定义一个变量时,我可以按常规方式将其提供给其他标签。但是,如果我在第三个选项卡中定义变量并希望它在第一个选项卡中可用,该怎么办?以下是第一个选项卡中变量的常规设置:

class AddCardViewController: UIViewController {

    var cards = [Card]()

    override func viewDidLoad() {
    super.viewDidLoad()

    cards = [1,2,3,4]

    let barViewController = self.tabBarController?.viewControllers
    let svc1 = barViewController![1] as! LearningViewController
    svc1.cards = self.cards
    }

在第二个viewController中我可以轻松使用卡片数组

class LearningViewController: UIViewController {

    var cards = [Card]()

    override func viewDidLoad() {
    super.viewDidLoad()

    print(cards)  ////works all fine

现在我想在第二个标签中定义一个变量,并使其可用于第一个标签。所以,反过来说。我尝试使用相同的设置,但是当我启动应用程序时崩溃,因为变量在第一个选项卡中为零 - 这是有道理的。有没有办法做到这一点,或者我只需要在第一个viewController中定义所有变量?

1 个答案:

答案 0 :(得分:0)

我认为最简单的解决方案是在调用相关变量之前强制加载第二个选项卡。最蛮力的方法是在AddCardViewController中创建一个func,它加载tabBarController中的所有选项卡,例如。

func loadAllTabs() {
    if let viewControllers = self.tabBarController?.viewControllers {
        for viewController in viewControllers {
            viewController.view
        }
    }
}

并在viewDidLoad中调用它:

override func viewDidLoad() {
  super.viewDidLoad()
    loadAllTabs()
}