<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