iOS 逆向传值

代理(delegate)、通知(NSNotification),block等等。

1、委托代理delegate只能是一对一之间的。他只能是navigation的栈里面的相邻控制器传值, 不能跨控制器传值。

比如:a到b,b到c.,而不能从c传到a。

@protocol PassValueDelegate

@optional

- (void)VCValuePass:(UIViewController*)VC;

@end

@property(assign,nonatomic)id delegate;

if([self.delegate respondsToSelector:@selector(VCValuePass:)]){

[self.delegateVCValuePass:self];

[self.navigationController popViewControllerAnimated:YES];

}

2、通知(NSNotifacation)

通知的用处就随意多了, 首先他是多对多传值的, 不过要先注册成为监听者,才能收到通知。简单、便捷。不用通知的时候,记得移除

2.1.发出通知 // object通知发布者(是谁要发布通知)userInfo:一些额外的信息(通知发布者传递给通知接收者的信息内容)

NSDictionary* dic =@{ @"name":@"等等", @"sex":@"女"};

NSString* address =@"哥哥";[[NSNotificationCenterdefaultCenter]postNotificationName:@"ValuePass"object:addressuserInfo:dic];

2.2.注册监听对象  name通知的名称。如果为nil,那么无论通知的名称是什么,监听器都能收到这个通知;  Object通知发布者。如果为anObject和aName都为nil,监听器都收到所有的通知

[[NSNotificationCenter defaultCenter] addObserver:selfselector:@selector(receiveValue:)name:@"ValuePass"object:nil];

- (void)receiveValue:(NSNotification* ) notification {

   NSLog(@"%@, %@",notifi.object, notifi.userInfo);

}

在注册成为监听者的页面, 要注意移除通知

- (void)receiveValue:(NSNotification* )notification{

NSLog(@"%@, %@",notifi.object, notification.userInfo);

}

3.1 Block 传值

.h 文件

typedef void (^newBlock)(NSString *);

@interface TwoViewController : UIViewController

// 声明block属性

@property (nonatomic, copy) newBlock block;

@end

.m 文件

- (void)viewWillDisappear:(BOOL)animated

{

[super viewWillDisappear:YES];

if (self.block != nil) {

self.block(@"呵呵");

}

}

3.2 其实用Block 用于回调执行一些方法更方便

使用场景 a 跳转到 b 进行一些事件处理后需要重新回到a ,例如让a 刷新UI,请求数据等等,可以在a 中重写该block 的setter 方法。

你可能感兴趣的:(iOS 逆向传值)