葵花宝典

block:👍

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
//代理协议
//block 终极宝典
//1.block 一般用于反向传值
//第二个界面 要求 第一个界面 做点事情
/*
1.block 必须定义在第二个界面
2.调用block
3.实现block
*/
block 实质就是一个代码块 定义好代码块 可以用于方向传值 作为中间人来使用
在第二个界面的.h文件里面 写协议
typedef void(^changeClolorBlock)(UIColor *);
协议指针
@property (nonatomic,copy) changeClolorBlock changeColor;

在第二个页面.m文件里面 调用block 写要求第一个页面做的事情
//2.
_changeColor([UIColor greenColor]);

在第一个页面.m文件里面 实现block
//3.
vc.changeColor = ^(UIColor *color){

self.view.backgroundColor = color;
};
***************************
代理:👍
/*
代理宝典
//场景 代理一般是用在反向传值
//第二个界面向第一个界面传值
(1,2步是在第二个界面完成)
1.定义代理协议是发生在第二个界面(协议和代理指针)
2.调用协议方法
(3,4步是在第一个界面完成)
3.使用代理,遵循协议
4.实现代理方法
*/

#在第二个页面的.h里面写协议

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
//1.指定协议
@protocol TwoVCDelegate <NSObject>
- (void)changeColor:(UIColor *)color;
@end
//2.代理指针
@property (nonatomic,assign) id <TwoVCDelegate>delegate;
在第二个页面的.m里面 调用协议 代理指针 指向 一个事件
[_delegate changeColor:[UIColor greenColor]];
在一个页面添加代理协议<TwoVCDelegate>
//使用代理
vc.delegate = self;
//实现代理
- (void)changeColor:(UIColor *)color{
self.view.backgroundColor = color;
}

##总结:

1
2
3
当你触发事件进入第二个页面的时候,第二个页面反向传值,需要第一个页面做一些事情,执行协议,定义指针,在返回第一个页面的触发事件里面,调用代理  把指针指向要求第一个页面做的事情,第一个页面 遵循协议 ,使用代理方法, 执行代理的事件(注意:代理的使用必须在第一个页面中,实例化第二个页面 的地方,否则不好使。)
模式:第一个页面开辟了一套通道,例如button的点击事件中实例化第二个页面 push跳转第二个页面 第二个页面这是需要第一个页面做事情 只有当第一个页面通过点击button的按钮跳转到第二个页面时 ,代理的事件才会在第一个页面执行
***

***************************

#通知:👍

1
2
在第二个页面的.m文件里面  触发事件的事件中
发送 要求第一个页面做的事情

1
2
3
4
5
6
7
8
9
//发射广播
[[NSNotificationCenter defaultCenter] postNotificationName:@"1234" object:[UIColor greenColor]];
在第一个页面的.m文件里面 设置接受的收音机
//需要创建一个收音机 viewDidLoad中
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(changeColor:) name:@"1234" object:nil];
#pragma mark - 实现广播方法
- (void)changeColor:(NSNotification *)notifi{
self.view.backgroundColor = notifi.object;
}