使用Delegate在两个ViewController间传值

在iOS开发中,数据传输是应用程序中不可或缺的一部分。在不同视图控制器(ViewController)之间传递数据,我们可以采用多种方法,其中一种常见且灵活的方式就是使用委托(Delegate)协议。本篇将详细介绍如何在两个ViewController之间利用委托协议进行值传递,以及它与Android中`onActivityResult`方法的相似之处。我们需要理解什么是委托协议。在Objective-C或Swift中,委托是一种设计模式,用于实现对象之间的通信。一个对象(委托者)可以定义一个协议,另一个对象(委托对象)遵循这个协议,这样委托者就可以通过协议的方法来通知委托对象某些事件的发生或者请求委托对象执行特定操作。在iOS应用中,常用此模式来处理视图控制器间的通信。创建委托协议: 1.定义一个委托协议:在需要接收值的ViewController中定义一个协议。协议通常定义在`.h`(Objective-C)或`.swift`(Swift)文件中。例如,我们定义一个名为`ValuePassingDelegate`的协议,它包含一个接收传递值的方法。 ```swift // Swift protocol ValuePassingDelegate: AnyObject { func didReceiveValue(value: Any) } // Objective-C @protocol ValuePassingDelegate - (void)didReceiveValue:(id)value; @end ``` 2.设置委托:在发送值的ViewController中,声明一个类型为上述协议的变量,用于存储委托对象。在接收到值后,会调用这个委托对象的方法。 ```swift class SenderViewController: UIViewController { weak var delegate: ValuePassingDelegate? // ... } ```objective-c @interface SenderViewController : UIViewController @property (nonatomic, weak) id delegate; // ... @end ``` 3.实现委托:在接收值的ViewController中,遵循并实现协议。这里需要确保在适当的时候设置SenderViewController的`delegate`属性为自身。 ```swift class ReceiverViewController: UIViewController, ValuePassingDelegate { override func viewDidLoad() { super.viewDidLoad() let sender = SenderViewController() sender.delegate = self } func didReceiveValue(value: Any) { //在这里处理接收到的值} } ```objective-c @implementation ReceiverViewController
zip 文件大小:36.5KB