码迷,mamicode.com
首页 > 其他好文 > 详细

Snail—UI学习之代理传值Delegate

时间:2015-07-28 21:09:25      阅读:124      评论:0      收藏:0      [点我收藏+]

标签:

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

在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


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

Snail—UI学习之代理传值Delegate

标签:

原文地址:http://blog.csdn.net/qq1791422018/article/details/47110673

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!