从2个视图控制器传递数据而无须安全

时间:2019-06-27 17:23:05

标签: ios swift xcode

我有一个mainviewcontroller和一个弹出视图控制器,打开时没有提示。

弹出视图控制器从Firebase接收数据,然后我需要将此数据附加到mainviewcontroller中的数组。

我该怎么做?

(我试图在mainviewcontroller中创建popupviewcontroller的属性,但导致应用崩溃)

这是打开弹出窗口的代码:

 @IBAction func showPopUp(_ sender: Any) {
        let popOverVC = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "sbPopUp") as! PopUpViewController
        self.addChild(popOverVC)
        popOverVC.view.frame = self.view.frame
        self.view.addSubview(popOverVC.view)
        popOverVC.didMove(toParent: self)

3 个答案:

答案 0 :(得分:0)

您需要连接这些类,以便弹出类知道接收到数据后如何处理。这是一个在操场上工作的示例结构,您应该可以将其应用于实际课程。

class MainClass {

    func showPopUp() {
        let popOverVC = PopUpClass()
        popOverVC.update = addToArray
        popOverVC.receivedData()
    }

    func addToArray() {
        print("Adding")
    }
}

class PopUpClass {
    var update: (()->())?

    func receivedData() {
        if let updateFunction = update {
            updateFunction()
        }
    }
}

let main = MainClass()
main.showPopUp()

答案 1 :(得分:0)

或者您可以创建一个全局变量,以便可以在任何地方访问它。 ...最好传递数据,但我只是想在这种情况下会更容易,因此可以在整个项目的任何位置访问该变量。

答案 2 :(得分:0)

如果只是通知,则可以在警报中显示它,但是如果您不想使用警报,则我提供的呈现另一个视图控制器的提议不是这样,请尝试我的代码:

//if you have navigation controller ->
let vc = self.storyboard?.instantiateViewController(
            withIdentifier: "storyboadrID") as! yourViewController
        self.navigationController?.pushViewController(vc, animated: true)
//if you don't use navigation controller ->
let VC1 = self.storyboard!.instantiateViewController(withIdentifier: "storyboadrID") as! yourViewController
            self.present(VC1, animated:true, completion: nil)

如果您要将任何数据或参数传递给目标视图控制器,也可以在呈现视图控制器之前像这样放置:

VC1.textView.text = "test"