情景描述:
1. 有两个viewController,一个是A,一个是B。
2. A,B上各有一个按键,点击它们后分别会跳向对方。
3. 想要实现在B中返回A的时候可以更新A中的数据。
代理实现:
1. 在B.h中声明一个代理协议(行15-19),在协议中定义要被代理的方法(行17);
2. 在前面引用此协议(行1)
3. 声明代理属性(行4,8)
1 @protocol SecondViewControllerDelegate;
2 @interface secondViewController : UIViewController {
3
4 id<SecondViewControllerDelegate> delegate;
5
6 }
7
8 @property(nonatomic,retain) id<SecondViewControllerDelegate> delegate;
9
10 -(IBAction)btn_back:(id)sender;
11
12
13 @end
14
15 @protocol SecondViewControllerDelegate
16
17 -(void)secondViewControllerDidFinish:(secondViewController *) controller;
18
19 @end
2 @interface secondViewController : UIViewController {
3
4 id<SecondViewControllerDelegate> delegate;
5
6 }
7
8 @property(nonatomic,retain) id<SecondViewControllerDelegate> delegate;
9
10 -(IBAction)btn_back:(id)sender;
11
12
13 @end
14
15 @protocol SecondViewControllerDelegate
16
17 -(void)secondViewControllerDidFinish:(secondViewController *) controller;
18
19 @end
4. B.m中的按键实现
-(IBAction)btn_back:(id)sender{
[self.delegate secondViewControllerDidFinish:self];
}
[self.delegate secondViewControllerDidFinish:self];
}
A.h中的内容
1 #import "secondViewController.h"
2
3 @interface testDelegate03ViewController : UIViewController<SecondViewControllerDelegate> {
4
5 }
6 @property(nonatomic,retain) IBOutlet UILabel *lb_show;
7 -(IBAction)btn_go:(id)sender;
8
9 -(void)secondViewControllerDidFinish:(secondViewController *)controller;
10
11 @end
2
3 @interface testDelegate03ViewController : UIViewController<SecondViewControllerDelegate> {
4
5 }
6 @property(nonatomic,retain) IBOutlet UILabel *lb_show;
7 -(IBAction)btn_go:(id)sender;
8
9 -(void)secondViewControllerDidFinish:(secondViewController *)controller;
10
11 @end
5. 使用前面定义的代理(行3)
6. 声明代理方法(行9)
7. A.m中按键的实现,设置代理(行4)
1 -(IBAction)btn_go:(id)sender{
2
3 secondViewController *controller=[[secondViewController alloc]initWithNibName:@"secondViewController" bundle:nil];
4 controller.delegate=self;
5 controller.modalTransitionStyle=UIModalTransitionStyleFlipHorizontal;
6 [self presentModalViewController:controller animated:YES];
7 [controller release];
8
9 }
2
3 secondViewController *controller=[[secondViewController alloc]initWithNibName:@"secondViewController" bundle:nil];
4 controller.delegate=self;
5 controller.modalTransitionStyle=UIModalTransitionStyleFlipHorizontal;
6 [self presentModalViewController:controller animated:YES];
7 [controller release];
8
9 }
8. 代理方法的实现
1 -(void)secondViewControllerDidFinish:(secondViewController *)controller{
2
3 [self dismissModalViewControllerAnimated:YES];
4 [lb_show setText:@"代理成功"];
5
6 }
2
3 [self dismissModalViewControllerAnimated:YES];
4 [lb_show setText:@"代理成功"];
5
6 }
效果:
在B中调用代理方法,而在A中实现了此方法,这样就达到了参数传递的效果
浙公网安备 33010602011771号