UI学习之代理传值Delegate

代理就是自己的事让别人来做

在OC中就是协议方要做的事给代理方来实现

背景情况

A父界面 B子界面 当B返回A的时候 要让A的背景颜色变为红色 这就要给A传一个color的参数

写两个ViewController

在RootViewController.h中写

#import <UIKit/UIKit.h>#import "WJJFirstViewController.h"<span style="color:#FF0000;">//4、把协议进入进来@interface WJJRootViewController : UIViewController <WJJFirstViewControllerDelegate></span>@end在RootViewController.m中写入#import "WJJRootViewController.h"@interface WJJRootViewController ()@end@implementation WJJRootViewController- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil{self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];if (self) {// Custom initialization}return self;}- (void)viewDidLoad{[super viewDidLoad];// Do any additional setup after loading the view.[self createRightBarButtonItem];}- (void)createRightBarButtonItem{UIButton * rightBarButton = [UIButton buttonWithType:UIButtonTypeSystem];[rightBarButton setTitle:@"nextPage" forState:UIControlStateNormal];rightBarButton.frame = CGRectMake(0, 0, 50, 20);rightBarButton.titleLabel.font = [UIFont systemFontOfSize:10];rightBarButton.tintColor = [UIColor redColor];[rightBarButton addTarget:self action:@selector(nextPage) forControlEvents:UIControlEventTouchUpInside];self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:rightBarButton];}- (void)nextPage{WJJFirstViewController * first = [[WJJFirstViewController alloc] init];<span style="color:#FF0000;">//5、让协议方的代理 设置为自己first.delegate = self;</span>[self.navigationController pushViewController:first animated:YES];}#pragma mark —delegate<span style="color:#FF0000;">//6、实现代理方法- (void)changeRootViewBackgroudColorWithColor:(UIColor *)color{self.view.backgroundColor = color;}</span>- (void)didReceiveMemoryWarning{[super didReceiveMemoryWarning];// Dispose of any resources that can be recreated.}@end然后再FirstViewController.h中写入下列代码#import <UIKit/UIKit.h><span style="color:#FF0000;">//1、创建代理@protocol WJJFirstViewControllerDelegate <NSObject>- (void)changeRootViewBackgroudColorWithColor:(UIColor *)color;@end</span>@interface WJJFirstViewController : UIViewController<span style="color:#FF0000;">//2、用该代理写一个属性@property (nonatomic,strong) id <WJJFirstViewControllerDelegate> delegate;</span>@end

然后再FirstViewController.m中写入

#import "WJJFirstViewController.h"@interface WJJFirstViewController ()@end@implementation WJJFirstViewController- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil{self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];if (self) {// Custom initialization}return self;}- (void)viewDidLoad{[super viewDidLoad];// Do any additional setup after loading the view.self.view.backgroundColor = [UIColor orangeColor];}- (void)viewWillDisappear:(BOOL)animated{[super viewWillDisappear:animated]; <span style="color:#FF0000;"> //3、当页面消失时 让它的代理实行代理方法 且把参数传进去[self.delegate changeRootViewBackgroudColorWithColor:[UIColor redColor]];</span>}- (void)didReceiveMemoryWarning{[super didReceiveMemoryWarning];// Dispose of any resources that can be recreated.}@end

版权声明:本文为博主原创文章,,未经博主允许不得转载。

因害怕失败而不敢放手一搏,永远不会成功

UI学习之代理传值Delegate

相关文章:

你感兴趣的文章:

标签云: