一:代理传值
在NextViewController.h中
// 1,定制传值协议
@protocol NextViewControllerDelegate
- (BOOL)nextViewControllWithColor:(UIColor *)color;
@end
// 2,定义代理属性
@property (weak, nonatomic) id delegate;
在NextViewController.m中
// 3,代理属性调用代理方法
if ([_delegate respondsToSelector:@selector(nextViewControllWithColor:)]) {
// 调用代理方法并传入红色
BOOL b = [_delegate nextViewControllWithColor:[UIColor redColor]];
}
在ViewController.m中
// 4,遵循代理协议
@interface ViewController ()
@end
// 5.实现代理方法
#pragma mark NextViewController代理
- (BOOL)nextViewControllWithColor:(UIColor *)color
{
self.view.backgroundColor = color;
return YES;
}
二:通知传值
在NextViewController.m中
// 1,(发送值的类)发送通知:单例模式
[[NSNotificationCenter defaultCenter] postNotificationName:@"mynoti" object:[UIColor redColor]];
在ViewController.m中
// 2,(接收值的类)监听通知
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(changeBackColor:) name:@"mynoti" object:nil];
方法:监听到通知之后调用的方法
- (void)changeBackColor:(NSNotification *)noti {
self.view.backgroundColor = noti.object;
}
// 3对象被销毁的时候会调用
- (void)dealloc {
// 移除监听者
[[NSNotificationCenter defaultCenter] removeObserver:self name:@"mynoti" object:nil];
}
三:block传值
在SecondViewController.h中
//1, 定义一个block: 返回值(^Block名)(参数类型)
typedef void(^MyBlock)(UIColor *, BOOL);
@interface SecondViewController : UIViewController
@property (nonatomic, strong) MyBlock myBlock;
在SecondViewController.m中
//2, 调用block传参,让预置块代码执行
_myBlock([UIColor redColor], YES);
在ViewController.m中
//3. 初始化secondVC
SecondViewController *secondVC = [[SecondViewController alloc] init];
// 设置预置块代码
// 预置代码块:块代码在跳转到下一个控制器的时候并没有执行,等到下一个控制器的返回按钮调用了myBlock得时候才执行。
secondVC.myBlock = ^(UIColor *color, BOOL b) {
self.view.backgroundColor = color;
};