<pre name="code" class="objc">// // MeViewController.h // Demo8_Delegate委托 // #import <UIKit/UIKit.h> //这里只是说明MeViewController是一个类型,在后面可以创建属性 @class MeViewController; //1.制定规则 协议名称通常是类名加Delegate @protocol MeDelegate <NSObject> -(void)driving:(MeViewController*)meVc address:(NSString*)address; @end @interface MeViewController : UIViewController //2.委托方法需要有delegate属性 @property(nonatomic,weak)id<MeDelegate> delegate; @property(nonatomic,strong)NSString *name; @end
// // MeViewController.m // Demo8_Delegate委托 // // Created by tarena on 16/4/12. // Copyright © 2016年 tarena. All rights reserved. // #import "MeViewController.h" @interface MeViewController () @end @implementation MeViewController /*声明熟悉 @property(nonatomic,strong)NSString *name; 做了三件事 1. NSString *_name; 2. -(void)setName:(NSString*)name { _name = name; } 3. -(NSString *)name{ return _name; } */ //重新定义getter方法 -(NSString *)name{ return @"张三"; } - (IBAction)back:(id)sender { //在此时此刻需要代理人 帮我做事 //3.在适当的时候,找代理人帮我做事 [self.delegate driving:self address:@"上海"]; //回到前一个界面 [self dismissViewControllerAnimated:YES completion:nil]; } - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view from its nib. } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } /* #pragma mark - Navigation // In a storyboard-based application, you will often want to do a little preparation before navigation - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { // Get the new view controller using [segue destinationViewController]. // Pass the selected object to the new view controller. } */ @end
<pre name="code" class="objc">#import <UIKit/UIKit.h> @interface DriverViewController : UIViewController @end
<pre name="code" class="objc">// // DriverViewController.m // Demo8_Delegate委托 // // Created by tarena on 16/4/12. // Copyright © 2016年 tarena. All rights reserved. // #import "DriverViewController.h" #import "MeViewController.h" //1.遵守协议 @interface DriverViewController () <MeDelegate> @property (weak, nonatomic) IBOutlet UILabel *label; @end @implementation DriverViewController //2.实现协议中的方法 -(void)driving:(MeViewController *)meVc address:(NSString *)address { self.label.text = [NSString stringWithFormat:@"开车送%@回%@",meVc.name,address]; NSLog(@"开车送%@回%@",meVc.name,address); } - (IBAction)goNextVC:(id)sender { MeViewController *mc = [[MeViewController alloc]init]; //3.设置委托方代理人为(自己) mc.delegate = self; //界面间的跳转 跳转到 MeViewController 界面 [self presentViewController:mc animated:YES completion:nil]; } - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view from its nib. } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } /* #pragma mark - Navigation // In a storyboard-based application, you will often want to do a little preparation before navigation - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { // Get the new view controller using [segue destinationViewController]. // Pass the selected object to the new view controller. } */ @end