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

Ios 如何使用委托和协议传递数据,ios,swift,delegates,protocols,Ios,Swift,Delegates,Protocols,我有第一个带有UILabel的viewController和第二个带有UItextField和Add按钮的viewController。它们嵌入在tabbar中。我想在单击“添加”按钮到第一个视图控制器的uilabel时从文本字段传递数据 protocol SendDelagate { func setData(string:String) } 第一视图控制器是 class ViewController: UIViewController,SendDelagate{ @IBOutlet

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

protocol SendDelagate 
{
func setData(string:String) 
}
第一视图控制器是

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
  }  
}
class SecondViewController: UIViewController {

var delegates:SendDelagate?

@IBOutlet weak var textField: UITextField!
override func viewDidLoad() {
    super.viewDidLoad()

}

@IBAction func addButton(_ sender: UIButton) {
    let text = textField.text!
    delegates?.setData(string: text)
     }
}
第二个视图控制器是

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
  }  
}
class SecondViewController: UIViewController {

var delegates:SendDelagate?

@IBOutlet weak var textField: UITextField!
override func viewDidLoad() {
    super.viewDidLoad()

}

@IBAction func addButton(_ sender: UIButton) {
    let text = textField.text!
    delegates?.setData(string: text)
     }
}

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

第二个视图控制器嵌入到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
    }
}

`让vc=SecondViewController()`这将创建一个新的
SecondViewController
实例,可能不是您看到的实例。您可以找到许多不同方法的示例。使用哪种方法取决于您认为随着开发的进行,您的应用程序将需要什么。转到google(或您最喜欢的搜索引擎)并搜索
uitabbarcontroller在选项卡之间传递数据swift
您如何从第一个vc导航到第二个vc?你是如何在第二个vc中导航的?它是使用故事板创建的吗?。此外,在第一个视图中创建的
vc
中,一旦
viewDidLoad
完成,控制器将超出范围