How to pass data between UIViewControllers with protocols/delegates

后端 未结 5 821

In the code below I have a ViewController(\"SenderViewController\"), which passes a message to the main ViewController when a button is tapped. Wha

5条回答
  •  无人及你
    2020-12-17 01:27

    @IBAction func sendData(sender: AnyObject) {  
    
        if inputMessage.text != ""{  
            self.delegate?.messageData(inputMessage.text!)  
            self.presentingViewController!.dismissViewControllerAnimated(true, completion: nil)  
    
        }else{
           //handle here
    }
    

    Note: If you need to pass multiple data to mainViewController then use dictionary to pass them. i.e.

    SenderViewController:

    import UIKit  
    protocol SenderViewControllerDelegate {  
        func messageData(data: [String : Any])  
    }  
    class SenderViewController: UIViewController {  
        @IBOutlet weak var inputMessage: UITextField!  
        var delegate: SenderViewControllerDelegate?  
    
        @IBAction func sendData(sender: AnyObject) {  
    
            let myDict = [ "name": "Name", "age": 21, "email": "test@gmail.com"] as! [String : Any]
    
            self.delegate?.messageData(myDict) 
            self.presentingViewController!.dismissViewControllerAnimated(true, completion: nil)  
    
    
      }  
    }  
    

    Main ViewController

    import UIKit  
    class ViewController: UIViewController, SenderViewControllerDelegate{  
        @IBOutlet weak var showData: UILabel!  
    
        override func viewDidLoad() {  
            super.viewDidLoad()  
        }  
    
        @IBAction func goToView(sender: AnyObject) {  
            let pvc = storyboard?.instantiateViewControllerWithIdentifier("senderViewController") as! SenderViewController  
            pvc.delegate = self  
            self.presentViewController(pvc, animated:true, completion:nil)  
        }  
    
       // What triggers this method, how it know when to listen? 
        func messageData(data: [String : Any]) {  
            print(data["name"])  
            print(data["age"])  
            print(data["email"])  
    
        }  
    } 
    

提交回复
热议问题