使用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
PassValueByDelegate.zip 预估大小:20个文件
folder
PassValueByDelegate 文件夹
folder
PassValueByDelegate.xcodeproj 文件夹
folder
project.xcworkspace 文件夹
file
contents.xcworkspacedata 164B
folder
xcuserdata 文件夹
folder
Ryan.xcuserdatad 文件夹
file
UserInterfaceState.xcuserstate 18KB
folder
xcuserdata 文件夹
folder
Ryan.xcuserdatad 文件夹
folder
xcschemes 文件夹
file
xcschememanagement.plist 491B
file
PassValueByDelegate.xcscheme 3KB
file
project.pbxproj 13KB
folder
PassValueByDelegate 文件夹
file
UserEntity.m 242B
file
ViewController.m 2KB
file
UserEntity.h 410B
folder
en.lproj 文件夹
file
ViewController.xib 18KB
file
InfoPlist.strings 45B
file
main.m 352B
file
SecondViewController.m 2KB
file
PassValueDelegate.h 296B
file
PassValueByDelegate-Prefix.pch 341B
file
SecondViewController.h 689B
file
SecondViewController.xib 18KB
file
ViewController.h 540B
file
AppDelegate.h 380B
file
PassValueByDelegate-Info.plist 1KB
file
AppDelegate.m 3KB
zip 文件大小:36.5KB