在 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 嵌入导航控制器中。让我们运行应用程序并查看它的工作方式。