如何让一个视图控制器从另一个视图控制器访问变量?

时间:2016-03-22 09:07:10

标签: ios xcode swift interface

我在堆栈上看到的所有内容都是将数据从输入传递到按下按钮上的另一个视图控制器。假设我有var banana这是一个字典数组,但是一旦我在ViewA.swift中的函数加载banana,我想要另一个viewController,比如ViewB.swift来操纵那些数据。适合。我没有从一个视图控制器到另一个视图控制器的segue。 编辑:它实际上是两个TableViewControllers ****

我查看了NSNotificationCenter,但这似乎不适用于我的变量类型,这是一个字典数组

3 个答案:

答案 0 :(得分:1)

使用NSNotificationCenter访问数据。

尝试以下代码

//Sent notification 

 let dictionary = ["key":"value"]    
 NSNotificationCenter.defaultCenter().postNotificationName("passData", object: nil, userInfo: dictionary)

//Receive  notification 

 NSNotificationCenter.defaultCenter().addObserver(self, 
 selector:"myMethod:", name: "passData", object: nil)

//Receive  notification method

 func myMethod(notification: NSNotification){
 print("data: \(notification.userInfo!["key"])")

答案 1 :(得分:0)

确保您已为所有ViewControllers提供标识符,然后使用以下命令对其进行实例化:

guard let viewControllerB = storyboard?.instantiateViewControllerWithIdentifier("ViewControllerB") as? ViewControllerB else {
    fatalError(); return
}
// then access the variable/property of ViewControllerB
viewControllerB.banana = whatEver

已添加以供澄清

这个适合我。

请确保您已为TableViewController提供标识符,否则您将无法实例化它。还要确保将instantiateViewControllerWithIdentifier的结果转换为TableViewController类,否则您将无法访问它的变量(我已经看到您正在努力解决这个问题;如果您收到错误UIViewController没有成员" myArray"那么你可能忘记了投射结果)

class TableViewController: UITableViewController {
    var myArray = [String]()
}

class ViewController: UIViewController {
    func someEventWillTriggerThisFunction() {
        let storyboard = UIStoryboard(name: "Main", bundle: nil)
        guard let tableViewController = storyboard.instantiateViewControllerWithIdentifier("TableViewController") as? TableViewController else {
            fatalError(); return
        }
        tableViewController.myArray = ["Value1", "Value2", "Value3"]
        /* if you want to present the ViewController use this: */
        self.presentViewController(tableViewController, animated: true, completion: nil)
    }
}

答案 2 :(得分:0)

不使用segue,您可以实例化View控制器,并设置公共参数。

['Toby', 'Chris', 'Lyndall']