Snail—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

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

时间: 2024-11-08 21:47:08

Snail—UI学习之代理传值Delegate的相关文章

Snail—UI学习之表视图TableView(一)

我们是整一个表视图 然后再表视图的上方是一个广告栏 首先,在.h文件中写上下面的代码 主要就是遵守一些代理 #import <UIKit/UIKit.h> @interface WJJRootViewController : UIViewController<UITableViewDataSource,UITableViewDelegate,UIScrollViewDelegate> @end 然后再.m文件中写上如下 #import "WJJRootViewContro

Snail—UI学习之表视图TableView(二)

接着上面的项目 ,当下面标记红色的代码写上后,我们按下右上角的edit按钮 就可以对cell进行插入.删除.移动等操作 #import "WJJRootViewController.h" @interface WJJRootViewController (){ //数据源 存放数据 NSMutableArray * _dataArray; //这就是我们的tableView UITableView * _tableView; //页面控制器 UIPageControl * _pageC

Snail—UI学习之表视图TableView多行删除

这次实现的功能是多行cell进行删除 代码是在上一次的基础上进行修改的 有的代码删除重写 有的方法只是加了一些逻辑判断 // // WJJRootViewController.m // blog_UITableView // // Created by Snail on 15-7-30. // Copyright (c) 2015年 Snail. All rights reserved. // #import "WJJRootViewController.h" @interface W

Snail—UI学习之UITableView之分组显示

之前的demo都是一个分组显示数据的 这次我们用的是带有分组的tableView #import "WJJRootViewController.h" @interface WJJRootViewController (){ UITableView * _tableView; NSMutableArray * _dataArray; } @end @implementation WJJRootViewController - (id)initWithNibName:(NSString *

iOS之UI学习-UITextField代理篇

</pre><pre name="code" class="objc">#import "ViewController.h" //签订代理协议 @interface ViewController ()<UITextFieldDelegate> @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; //须知:U

Snail—UI学习之自定义标签栏UITabBarController

这里的背景跟上面的差不多 不过这里要用到AppDelegate的单例进行传值 首先到AppDelegate.h文件中 <span style="color:#FF0000;">#import <UIKit/UIKit.h> @interface WJJRootViewController : UITabBarController //声明一UIButton属性 来记录当前按下的按钮 @property (nonatomic,strong) UIButton *

Snail—UI学习之自定义通知NSNotification

背景是:一个界面跳转到第二个界面 然后 第一个界面发了一个通知  然后第二个界面收到这个通知后 把里面的数据取出来 在RootViewController.m中写入下面代码 #import "WJJRootViewController.h" #import "WJJFirstViewController.h" @interface WJJRootViewController (){ UITextField * _textField; } @end @implemen

Snail—UI学习之自定义键盘及键盘收起(待完善)

在viewController.h中加入代理 #import <UIKit/UIKit.h> @interface WJJRootViewController : UIViewController <span style="color:#FF0000;"><UITextFieldDelegate></span> @end viewController.m中代码展示 #import "WJJRootViewController.h

Snail—UI学习之系统标签栏UITabBarController

背景条件是 有一个根控制器 继承于UITabBarController 然后 建四个UIViewController 再然后创建一个UIViewController 我们让它作为上面四个其中之一的子界面 然后再RootViewController中写入下面代码 #import "WJJRootViewController.h" #import "WJJFirstViewController.h" #import "WJJSecondViewControll