在 iPhone 中设置简单的委托来实现两个视图控制器之间的通信


在这篇文章中,您将学习关于委托以及如何创建委托。首先,

什么是委托?

委托是一个简单的术语,指的是对象之间的通信。它是一种连接对象并在它们之间进行通信的简单方法。

委托是如何工作的?

委托是借助协议创建的。协议在类中声明,在该类中将发生某些事件,这些事件应该通知其他类。在协议中,我们编写函数的声明,并在调用类中定义它。

如何创建委托?

我们将通过一个示例项目来完成。

执行步骤:

  • 创建一个类,命名为 FirstViewController,再创建一个类并将其命名为 SecondViewController。在故事板中创建它们各自的视图控制器。

  • 在 SecondViewController 中声明一个协议。协议是在任何类或其他对象之外声明的。

protocol SecondViewControllerDelegate {
   func buttonPressedInVC2()
}
  • 在 SecondViewController 中,创建一个我们刚刚创建的委托的可选对象。

var delegate: SecondViewControllerDelegate?
  • 当 SecondViewController 中发生某些事件时,我们需要调用在协议中声明的函数,让我们创建一个在第二个视图控制器中按下按钮时发生的事件。

@IBAction func buttonTapped(_ sender: UIButton) {
   self.delegate?.buttonPressedInVC2()
   self.navigationController?.popViewController(animated: true)
}

所有这些都在 SecondViewController 中完成,现在让我们处理 FirstViewController。

  • 我们需要使 FirstViewController 符合/实现 SecondViewControllerDelegate,它会自动提示您添加协议存根。

extension FirstViewController: SecondViewControllerDelegate {
   func buttonPressedInVC2() { }
}
  • 在我们刚刚实现的协议中,我们应该编写当此委托操作发生时想要执行的代码。

    让我们在 FirstViewController 中创建一个标签,并在调用委托方法时更改其文本。

extension FirstViewController: SecondViewControllerDelegate {
   func buttonPressedInVC2() {
      self.lblOne.text = "Delegate Implemented"
   }
}
  • 剩下最后一步,即 SecondViewController 中的委托对象是可选的,并且在分配之前将为 nil,因此在 FirstViewController 中,我们将在从 FirstViewController 转到 SecondViewController 时分配该对象。

    让我们为此在 FirstViewController 中创建一个按钮。

@IBAction func goToNextVC(_ sender: Any) {
   let vc = self.storyboard?.instantiateViewController(withIdentifier: "SecondViewController") as! SecondViewController
   vc.delegate = self
   self.navigationController?.pushViewController(vc, animated: true)
}
  • 如果您还没意识到,我们需要将 FirstViewController 嵌入导航控制器中。让我们运行应用程序并查看它的工作方式。

更新于:2020年6月27日

631 次浏览

开启您的职业生涯

通过完成课程获得认证

开始学习
广告