iOS开发页面传值方案

iOS开发过程中涉及到最多的一个地方就是页面传值问题,值从A页面到B页面,然后从B页面到A页面。从而保证整个程序的连贯性和实时性。

目前iOS页面间传值方案有如下方式:

1.属性传值 2.委托delegate传值 3.通知notification传值 4.block传值 5.kvo传值 6.userDefault传值 7.文件传值 8.单例模式传值 9.数据库传值

1.属性传值:A页面设置属性 NSString *paramString,在跳转B页面的时候初始化paramString。

//A页面.h文件
@property (nonatomic, copy)NSString *paramString;

//A页面.m文件
 NextViewController *nextVC = [[NextViewController alloc] init];
 nextVC.paramString = @"参数传质";
 [self presentViewController:nextVC animated:YES completion:nil];

2.委托delegate传值:在B页面定义delegate,并且设置delegate属性,在A页面实现delegate协议

3.通知notification传值:在B页面中发送通知,在A页面注册观察者并且在不用的时候移除观察者。

//B页面发送通知 
[[NSNotificationCenter defaultCenter] postNotificationName:@"ChangeNameNotification" object:self userInfo:@{@"name":self.nameTextField.text}];
 [self dismissViewControllerAnimated:YES completion:nil];

//A页面注册观察者
 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(ChangeNameNotification:) name:@"ChangeNameNotification" object:nil];
}
//观察到通知时候的处理方法
-(void)ChangeNameNotification:(NSNotification*)notification{
    NSDictionary *nameDictionary = [notification userInfo];
    self.nameLabel.text = [nameDictionary objectForKey:@"name"];
}

//通知不使用的时候移除观察者
 [[NSNotificationCenter defaultCenter] removeObserver:self];

4.block传值:在B页面定义一个block类型的变量,在B页面跳转A的时候调用这个block。在A页面跳转到B页面的时候对B页面的block赋值。


//B页面定义block,并设置block类型的变量
 typedef void (^ablock)(NSString *str);
 @property (nonatomic, copy) ablock block;

//B页面跳转到A页面调用这个block
 self.block(self.nameTextField.text);
 [self dismissViewControllerAnimated:YES completion:nil];

//A页面跳转到B页面的时候对B页面的block赋值,这样在B页面跳转的时候就会回调这个block函数
 [self presentViewController:second animated:YES completion:nil];
 second.block = ^(NSString *str){
        self.nameLabel.text = str;
    };

5.kvo传值:在A页面设置B页面的变量second,并且对这个变量进行观察

- (void)addObserver:(NSObject * _Nonnull)anObserver forKeyPath:(NSString * _Nonnull)keyPath options:(NSKeyValueObservingOptions)options context:(void * _Nullable)context

并在A页面实现

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSString *,id> *)change context:(void *)context方法。

在B页面对变量keyPath进行设置,在A页面都会观察的到。

@property (nonatomic, strong) SecondViewController *second; 
//在A视图跳转到B视图的地方添加如下代码 
self.second = [[SecondViewController alloc] initWithNibName:@"SecondViewController" bundle:nil];
[self.second addObserver:self forKeyPath:@"userName" options:NSKeyValueObservingOptionNew context:nil];
[self presentViewController:self.second animated:YES completion:nil];

//实现这个观察对象的方法
 -(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context

//在B页面对userName进行设置,在A页面都可以间听到



6.UserDefault传值:保存本地

7.文件传值:保存到文件,从文件中读取

8.单例模式传值:通过全局的方式保存

9.数据库传值:保存到本地数据库,从数据库中读取。


转载于:https://my.oschina.net/simple2012/blog/531609

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值