[英]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.