如何使用委托和协议传递数据

问题描述

我有一个具有UILabel的viewController和第二个具有UItextField和“添加”按钮的ViewController。它们嵌入在选项卡中。单击添加按钮到第一个视图控制器的uilabel时,我想从文本字段传递数据。

ContentProvider

第一视图控制器是

protocol SendDelagate 
{
func setData(string:String) 
}

第二个ViewController是

class ViewController: UIViewController,SendDelagate{

@IBOutlet weak var label: UILabel!

override func viewDidLoad() {
    super.viewDidLoad()
    let vc = SecondViewController()
    vc.delegates = self
}
func setData(string: String) {
    label.text = string
  }  
}

解决方法

SecondViewController嵌入在UITabbarController中吗?

您可以通过TabbarController找到SecondViewController实例

class ViewController: UIViewController,SendDelagate {

    @IBOutlet weak var label: UILabel!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        if let secondViewController = tabBarController?.viewControllers?.first(where: { $0 is SecondViewController }) as? SecondViewController {
            secondViewController.delegates = self
        }
    }
    
    func setData(string: String) {
        label.text = string
    }
}
,

您可以使用“用户默认设置”。因此,您可以使用“添加”按钮将其保存到“用户默认设置”中,并在另一视图的viewDidLoad上进行加载。