使用委托将数据从初始视图控制器传递到第二个视图控制器- Swift

33qvvth1  于 2023-08-02  发布在  Swift
关注(0)|答案(1)|浏览(99)

我试图更好地理解Swift中的委托,我已经看到了如何使用委托将数据从第二个视图控制器传递回初始视图控制器。但我对如何使用委托将数据从初始视图传递到第二个视图感到困惑。我已经在初始视图中初始化了委托的一个示例,并在第二个视图中实现了委托协议,但我仍然无法使用委托将数据从初始视图传递到第二个视图。任何关于我可能做错了什么的建议都将不胜感激!下面是我的代表团尝试的故事板视图。1
初始视图类:

import UIKit

class ViewController: UIViewController {
    
    var data: DataDelegate?
    @IBOutlet weak var text: UITextField!
    @IBOutlet weak var send: UIButton!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        // Do any additional setup after loading the view.
    }
    
    @IBAction func send(_ sender: Any) {
        
        let msg = text.text!
        data?.sendData(data: msg)
        print("SENDING MESSAGE: \(msg)")
    }
}
        
protocol DataDelegate {
    func sendData(data: String)
}

Second View Class:
import UIKit

class RVC: UIViewController, DataDelegate {
    @IBOutlet weak var delegationLabel: UILabel!
    @IBOutlet weak var message: UILabel!
    @IBOutlet weak var back: UIButton!
    
    let vc = ViewController()

    func sendData(data: String) {
        print("DATA SENT")
        let msg = data
        print(msg)
        message.text = data
    
    }
    
    
    override func viewDidLoad() {
        super.viewDidLoad()
        print("LOADED")
        vc.data = self

        // Do any additional setup after loading the view.
    }
}

字符串

68bkxrlz

68bkxrlz1#

为了解决这个问题,我们需要正确理解委托协议的概念。委托协议基本上是一种通信器,它有助于使用特定的提到的方法进行b/w两个VC的通信。当一个协议被定义并且它的对象被创建在一个VC中时,那么就认为这些是其他VC必须遵循或实现的规则,以便与这个VC通信。
在这种情况下(委托的转发使用),第二VC将向第一VC发送回呼叫并请求数据,在接收到呼叫时,第一VC然后将向第二VC发送数据。
第一个VC(ViewController):

import UIKit

class ViewController: UIViewController {
    
    @IBOutlet weak var text: UITextField!
    
    override func viewDidLoad() {
        super.viewDidLoad()
    }
    
    @IBAction func send(_ sender: Any) {
        let secondVC = RVC()
        secondVC.delegate = self
        self.present(secondVC, animated: true)
    }
    
}

extension ViewController: DataDelegate {
    
    func passData() -> String {
        return text.text!
    }
}

字符串
第二VC(RVC):

protocol DataDelegate {
    func passData() -> String
}

import UIKit

class RVC: UIViewController {
    
    @IBOutlet weak var message: UILabel!
    
    var delegate: DataDelegate?
    
    override func viewDidLoad() {
        super.viewDidLoad()
        setData()
    }
    
    func setData() {
        if let messageDelegate = delegate {
            let messageReceived = messageDelegate.passData()
            message.text = messageReceived
        }
    }
    
}


希望它能解决你的问题,帮助你对委托有一些清晰的理解。

相关问题