iOS中页面间常用四种传值方式:通知,委托,block,单例

1、通知

在传值的地方写:

//    创建通知对象

NSString *str = @"通知";

NSNotification *note = [[NSNotification alloc] initWithName:@"TextValueChanged" object:str userInfo:nil];

//  通过通知中心发送通知

[[NSNotificationCenter defaultCenter] postNotification:note];

接收的地方写:

//    接收通知

//    向通知中心注册一个新的观察者(第一个参数)

//    第二个参数是收到通知后需要调用的方法

//    第三个参数是要接收得通知的名字

//    第四个参数通知是nil,表示不管哪个对象发送通知都要接收

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(noteReceived:) name:@"TextValueChanged" object:nil];

-(void)noteReceived:(NSNotification *)note

{

UILabel *label = (UILabel *)[self.view viewWithTag:1000];

NSString *str = note.object;

label.text = str;

}

//释放数据防止通知泄露,去掉通知

-(void)dealloc

{

[[NSNotificationCenter defaultCenter] removeObserver:self];

}


2、委托回调

先建一个Protocol文件

申明委托的方法

在传值类的.h中写

#import <UIKit/UIKit.h>

#import "CDChangeValueDelegate.h"

@interface SecondViewController : UIViewController

@property (nonatomic,strong) id<CDChangeValueDelegate>delegate;

@end

.m中要传值的位置写

NSString *str = @"委托";

[self.delegate changeValue:str];

在接收地方写(记得要写代理)

3、block传值

在要传值类的.h中申明block

#import <UIKit/UIKit.h>

typedef void (^CDMyBlockType)(NSString *);

@interface SecondViewController : UIViewController

//用一个属性来接收block表达式

@property (nonatomic,copy) CDMyBlockType block;

@end

传值.m中写

//  传送block的参数

NSString *str = @"Block";

self.block(str);


在接收地方写

SecondViewController *second = [[SecondViewController alloc] init];

//    接收block传的值

second.block = ^(NSString *str)

{

UILabel *label =(id)[self.view viewWithTag:1000];

label.text = str;

};


4、单例传值

首先建一个类Appstorage

 

在传值地方进行赋值

NSString *str = @"单例";

[AppStorage sharedInstance].str = str;

在接收地方写

UILabel *label = (UILabel *)[self.view viewWithTag:1000];

if ([AppStorage sharedInstance].str) {

label.text = [AppStorage sharedInstance].str;

}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容