繁体   English   中英

从2个View Controller传递数据而没有segue

[英]passing data from 2 view controllers without segue

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

弹出的viewcontroller从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)

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

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()

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

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

//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"

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM