1、 通知传值-一般常用于返回界面的时候,把返回前界面的值传到返回后界面。
-
- //前一个界面
- //注册通知
- [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(notification:) name:@"notification" object:nil];
- // Do any additional setup after loading the view.
- }
- //执行通知方法
- - (void) notification:(NSNotification *)notifi{
- NSLog(@"++++++");
- NSLog(@"%@",notifi.userInfo);
- }
- //移除通知
- -(void) dealloc{
- //第一种 移除该控制器所有的通知
- [[NSNotificationCenter defaultCenter] removeObserver:self];
- //第二种 移除该控制器下名为"notification"的通知
- // [[NSNotificationCenter defaultCenter] removeObserver:self name:@"notification" object:nil];
- }
- //后一个界面
- //创建传值信息
- NSDictionary *dict=[[NSDictionary alloc]initWithObjectsAndKeys:@"val1",@"key1",@"val2",@"key2", nil];
- //创建通知
- NSNotification *notification=[NSNotification notificationWithName:@"notification" object:nil userInfo:dict];
- //通过通知中心发送通知
- [[NSNotificationCenter defaultCenter] postNotification:notification];
-
2、block 反向传值
前一个界面获取后一个界面传过来的值
- //后一个界面
- .h文件
- @interface jViewController : UIViewController
- //定义block
- @property (nonatomic,copy) void (^NextViewControllerBlock)(NSString *tfText);
- @end
- .m文件
- -(void) btnClick:(UIButton *)btn{
-
- //判断block是否为空
- if (self.NextViewControllerBlock) {
- self.NextViewControllerBlock(@"我是后一个界面传的值");
- }
- [self.navigationController popViewControllerAnimated:YES];
- }
- //前一个界面
- //.m文件
- -(void) btnClick:(UIButton *)btn{
- jViewController *nextVC = [[jViewController alloc]init];
- nextVC.NextViewControllerBlock = ^(NSString *tfText){
- NSLog(@"++++%@",tfText);
- };
- [self.navigationController pushViewController:nextVC animated:YES];
-
- }
3、属性传值(一般适用于前一个界面传值给后一个界面)
- //后一个界面
- //首先在.h定义获值属性(就是要有接收传值过来的属性)
- @interface jViewController : UIViewController
- @property( copy,nonatomic)NSString *str;
- @end
-
- //.m
- -(void) btnClick:(UIButton *)btn{
- NSLog(@"++++%@",_str);
- }
- //前一个界面
- -(void) btnClick:(UIButton *)btn{
- //跳转到后一个界面,也把值传过去
- jViewController *nextVC = [[jViewController alloc]init];
- nextVC.str=@"我是第一个界面传给第二个界面的值";
- [self.navigationController pushViewController:nextVC animated:YES];
-
- }
4、数据持久化传值
NSUserDefaults是数据持久化的一种主要做存储使用。
- NSUserDefaults *userDefaults=[NSUserDefaults standardUserDefaults];
- //存储数据
- [userDefaults setObject:<#(nullable id)#> forKey:<#(nonnull NSString *)#>];
- [userDefaults setInteger:<#(NSInteger)#> forKey:<#(nonnull NSString *)#>];
- [userDefaults setBool:<#(BOOL)#> forKey:<#(nonnull NSString *)#>];
- [userDefaults setURL:<#(nullable NSURL *)#> forKey:<#(nonnull NSString *)#>];
- [userDefaults setFloat:<#(float)#> forKey:<#(nonnull NSString *)#>];
- [userDefaults setDouble:<#(double)#> forKey:<#(nonnull NSString *)#>];
- [userDefaults setValue:<#(nullable id)#> forKey:<#(nonnull NSString *)#>];
- //读取数据
- [userDefaults objectForKey:<#(nonnull NSString *)#>];
- [userDefaults integerForKey:<#(nonnull NSString *)#>];
- [userDefaults boolForKey:<#(nonnull NSString *)#>];
- [userDefaults URLForKey:<#(nonnull NSString *)#>];
- [userDefaults floatForKey:<#(nonnull NSString *)#>];
- [userDefaults doubleForKey:<#(nonnull NSString *)#>];
- [userDefaults valueForKey:<#(nonnull NSString *)#>];