如何设置一个简单的委托,以便在两个视图控制器之间进行通信?

如何设置一个简单的委托,以便在两个视图控制器之间进行通信?

我有两个UITableViewControllers并需要使用委托将子视图控制器的值传递给父控件。我知道什么是代表,我只想看到一个简单的榜样。

谢谢


一只名叫tom的猫
浏览 516回答 3
3回答

Smart猫小萌

下面的代码只显示了委托概念的基本用法。您可以根据需要命名变量和类。首先,您需要声明一个协议:让我们称之为MyFirstControllerDelegate.h@protocol&nbsp;MyFirstControllerDelegate-&nbsp;(void)&nbsp;FunctionOne:&nbsp;(MyDataOne*)&nbsp;dataOne;-&nbsp;(void)&nbsp;FunctionTwo:&nbsp;(MyDatatwo*)&nbsp;dataTwo;@end进口MyFirstControllerDelegate.h存档并确认第一控制器带协议MyFirstControllerDelegate#import&nbsp;"MyFirstControllerDelegate.h"@interface&nbsp;FirstController&nbsp;:&nbsp;UIViewController<MyFirstControllerDelegate>{}@end在实现文件中,您需要实现协议的两个功能:@implementation&nbsp;FirstController&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;(void)&nbsp;FunctionOne:&nbsp;(MyDataOne*)&nbsp;dataOne&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//Put&nbsp;your&nbsp;finction&nbsp;code&nbsp;here &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;(void)&nbsp;FunctionTwo:&nbsp;(MyDatatwo*)&nbsp;dataTwo&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//Put&nbsp;your&nbsp;finction&nbsp;code&nbsp;here &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//Call&nbsp;below&nbsp;function&nbsp;from&nbsp;your&nbsp;code &nbsp;&nbsp;&nbsp;&nbsp;-(void)&nbsp;CreateSecondController &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SecondController&nbsp;*mySecondController&nbsp;=&nbsp;[SecondController&nbsp;alloc]&nbsp;initWithSomeData:.]; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//.....&nbsp;push&nbsp;second&nbsp;controller&nbsp;into&nbsp;navigation&nbsp;stack&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mySecondController.delegate&nbsp;=&nbsp;self&nbsp;; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[mySecondController&nbsp;release]; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}@end在你的第二控制器:@interface&nbsp;SecondController:<UIViewController>{ &nbsp;&nbsp;&nbsp;id&nbsp;<MyFirstControllerDelegate>&nbsp;delegate;}@property&nbsp;(nonatomic,assign)&nbsp;&nbsp;id&nbsp;<MyFirstControllerDelegate>&nbsp;delegate;@end的实现文件中第二控制器.@implementation&nbsp;SecondController@synthesize&nbsp;delegate;//Call&nbsp;below&nbsp;two&nbsp;function&nbsp;on&nbsp;self.-(void)&nbsp;SendOneDataToFirstController{ &nbsp;&nbsp;&nbsp;[delegate&nbsp;FunctionOne:myDataOne];}-(void)&nbsp;SendSecondDataToFirstController{ &nbsp;&nbsp;&nbsp;[delegate&nbsp;FunctionTwo:myDataSecond];}@end这里是关于委托的wiki文章。

浮云间

下面的解决方案是使用委托将数据从VC2发送到VC1的非常基本和简单的方法。PS:这个解决方案是在Xcode 9.x和SWIFT 4声明了一个协议,并创建了一个代表变入ViewControllerB&nbsp;&nbsp;&nbsp;&nbsp;import&nbsp;UIKit &nbsp;&nbsp;&nbsp;&nbsp;//Declare&nbsp;the&nbsp;Protocol&nbsp;into&nbsp;your&nbsp;SecondVC &nbsp;&nbsp;&nbsp;&nbsp;protocol&nbsp;DataDelegate&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;func&nbsp;sendData(data&nbsp;:&nbsp;String) &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;class&nbsp;ViewControllerB&nbsp;:&nbsp;UIViewController&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;//Declare&nbsp;the&nbsp;delegate&nbsp;property&nbsp;in&nbsp;your&nbsp;SecondVC &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;delegate&nbsp;:&nbsp;DataDelegate? &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;data&nbsp;:&nbsp;String&nbsp;=&nbsp;"Send&nbsp;data&nbsp;to&nbsp;ViewControllerA." &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;override&nbsp;func&nbsp;viewDidLoad()&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;super.viewDidLoad() &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@IBAction&nbsp;func&nbsp;btnSendDataPushed(_&nbsp;sender:&nbsp;UIButton)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Call&nbsp;the&nbsp;delegate&nbsp;method&nbsp;from&nbsp;SecondVC &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.delegate?.sendData(data:self.data) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dismiss(animated:&nbsp;true,&nbsp;completion:&nbsp;nil) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}ViewControllerA确认协议,并期望通过委托方法接收数据。发送数据&nbsp;&nbsp;&nbsp;&nbsp;import&nbsp;UIKit &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Conform&nbsp;the&nbsp;&nbsp;DataDelegate&nbsp;protocol&nbsp;in&nbsp;ViewControllerA &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;class&nbsp;ViewControllerA&nbsp;:&nbsp;UIViewController&nbsp;,&nbsp;DataDelegate&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@IBOutlet&nbsp;weak&nbsp;var&nbsp;dataLabel:&nbsp;UILabel! &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;override&nbsp;func&nbsp;viewDidLoad()&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;super.viewDidLoad() &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@IBAction&nbsp;func&nbsp;presentToChild(_&nbsp;sender:&nbsp;UIButton)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;let&nbsp;childVC&nbsp;=&nbsp;&nbsp;UIStoryboard(name:&nbsp;"Main",&nbsp;bundle:&nbsp;nil). &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;instantiateViewController(withIdentifier:"ViewControllerB")&nbsp;as!&nbsp;ViewControllerB &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//Registered&nbsp;delegate &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;childVC.delegate&nbsp;=&nbsp;self &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.present(childVC,&nbsp;animated:&nbsp;true,&nbsp;completion:&nbsp;nil) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Implement&nbsp;the&nbsp;delegate&nbsp;method&nbsp;in&nbsp;ViewControllerA &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;func&nbsp;sendData(data&nbsp;:&nbsp;String)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;data&nbsp;!=&nbsp;""&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.dataLabel.text&nbsp;=&nbsp;data&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

iOS