如何在SWIFT中在视图控制器和其他对象之间共享数据?

如何在SWIFT中在视图控制器和其他对象之间共享数据?

假设我在我的SWIFT应用程序中有多个视图控制器,我希望能够在它们之间传递数据。如果我在视图控制器堆栈中有几个层次,如何将数据传递给另一个视图控制器?还是在选项卡栏视图控制器中的选项卡之间?

(注意,这个问题是“响铃人”。)人们对它的要求太高了,所以我决定写一篇关于这一主题的教程。见下面的答案。


尚方宝剑之说
浏览 766回答 3
3回答

UYOU

SWIFT 4数据的快速传输有很多种方法。在这里,我要添加一些最好的方法。1)使用故事板段故事板分页格对于在源视图控制器和目标视图控制器之间传递数据非常有用,反之亦然。// If you want to pass data from ViewControllerB to ViewControllerA while user tap on back button of ViewControllerB.         @IBAction func unWindSeague (_ sender : UIStoryboardSegue) {             if sender.source is ViewControllerB  {                 if let _ = sender.source as? ViewControllerB {                     self.textLabel.text = "Came from B = B->A , B exited"                 }             }         }// If you want to send data from ViewControllerA to ViewControllerB                 override func prepare(for segue: UIStoryboardSegue, sender: Any?) {             if  segue.destination is ViewControllerB {                 if let vc = segue.destination as? ViewControllerB {                     vc.dataStr = "Comming from A View Controller"                 }             }         }2)使用代表法ViewControllerD//Make the Delegate protocol in Child View Controller (Make the protocol in Class from You want to Send Data)     protocol  SendDataFromDelegate {         func sendData(data : String)     }     import UIKit     class ViewControllerD: UIViewController {         @IBOutlet weak var textLabelD: UILabel!         var delegate : SendDataFromDelegate?  //Create Delegate Variable for Registering it to pass the data         override func viewDidLoad() {             super.viewDidLoad()             // Do any additional setup after loading the view.            textLabelD.text = "Child View Controller"         }         @IBAction func btnDismissTapped (_ sender : UIButton) {             textLabelD.text = "Data Sent Successfully to View Controller C using Delegate Approach"             self.delegate?.sendData(data:textLabelD.text! )             _ = self.dismiss(animated: true, completion:nil)         }     }ViewControllerC    import UIKit     class ViewControllerC: UIViewController , SendDataFromDelegate {         @IBOutlet weak var textLabelC: UILabel!         override func viewDidLoad() {             super.viewDidLoad()             // Do any additional setup after loading the view.        }         @IBAction func btnPushToViewControllerDTapped( _ sender : UIButton) {             if let vcD = self.storyboard?.instantiateViewController(withIdentifier: "ViewControllerD") as?  ViewControllerD  {                 vcD.delegate = self // Registring Delegate (When View Conteoller D gets Dismiss It can call sendData method                     //            vcD.textLabelD.text = "This is Data Passing by Referenceing View Controller D Text Label."                  //Data Passing Between View Controllers using Data Passing                                 self.present(vcD, animated: true, completion: nil)             }         }         //This Method will called when when viewcontrollerD will dismiss. (You can also say it is a implementation of Protocol Method)                 func sendData(data: String) {             self.textLabelC.text = data        }     }
打开App,查看更多内容
随时随地看视频慕课网APP