四种传值方式"/>
IOS的四种传值方式
在IOS界面跳转中,通常需要传值来解决一些实际问题,比如A界面跳转B界面时,需要告诉B界面显示那些内容。B界面做了某些操作之后,A界面需要做一些其他的操作等等。这些操作的数据来往,我们可以看做它在传值,所以传值不是我们一般意义的传一些数值过去,而是一些数据,可以是一些字符串,一个数组,某种状态等等。
在介绍之前,先奉上自己做的Demo:
iOS界面间的传值方式大概可以分为以下四种:
1.正向传值。
2.反向传值。
3.通知传值。
4.单例传值。
一、正向传值。当A界面向B界面跳转时,A界面将一些数据传给B界面,这就是正向传值。
SecondViewController *vc = [[UIStoryboard storyboardWithName:@"Main"bundle:nil] instantiateViewControllerWithIdentifier:@"SecondViewController"];
vc.value = @"我是正向传值过来的";
[self.navigationController pushViewController:vc animated:YES];
这就是一个正向传值的简单例子,在初始化完secondViewController之后,给它的一个属性赋值,然后在secondViewController用来显示或者一些其他的操作。由此可以看出正向传值是最简单,最基本的方式。
二、反向传值。当A界面跳转B界面,B界面将一些数据传递给A界面时,这就是反向传值。
反向传值相对来说比较复杂,比较常用的有代理和block两种方法,在这里我们只演示代理。
第一步:为了方便理解,首先我们先在B界面定义一个协议,在协议里面在定义一个方法,方法的具体作用就是传值用的。
@protocol ThirdViewControllerDelegate <NSObject>
-(void)finishValue:(NSString *)string;
@end
第二步:在B界面声明一个遵守该协议的属性。
@property (weak,nonatomic) id<ThirdViewControllerDelegate> delegate;
第三步:在A界面初始化B界面时,同时给该属性设置代理对象为A界面,也就是self。
ThirdViewController *vc = [[UIStoryboard storyboardWithName:@"Main"bundle:nil] instantiateViewControllerWithIdentifier:@"ThirdViewController"];
vc.delegate = self;
[self.navigationController pushViewController:vc animated:YES];
vc.delegate = self。这句话就设置了代理对象。
第四步:让A界面在遵守该协议。
@interface SecondViewController () <ThirdViewControllerDelegate>
第五步:在A界面实现一些里面的传值方法,并改变一些显示等等。
- (void)finishValue:(NSString *)string {
self.label.text = string;
}
在这里我只是简单的做了一个显示。
第六步:在B界面的触发事件里,让delegate属性调用传值方法。
[self.delegate finishValue:self.textField.text];
到这里,我们使用代理的方法实现了反向传值。
三、通知传值。利用通知中心,向某个已经注册了通知的对象发送数据。在实现方式上和反向传值大同小异。
通知传值不一定发生在A界面和B界面之间,或许A界面与B界面没有什么关系,它们可能是并行存在的关系,比如tabbarController的每个tabbar上的viewController。
第一步:在A界面注册是个通知,并实现接收通知的方法。
[[NSNotificationCenter defaultCenter] addObserver:selfselector:@selector(notification:) name:@"notification" object:nil];
注册一个通知,并且定义一个通知接收的方法,和通知的名称
-(void)notification:(NSNotification *)info {
self.textField.text = info.userInfo[@"value"];
}
实现接收通知的方法
第二步:在B界面发送相同名称的通知。
[[NSNotificationCenter defaultCenter] postNotificationName:@"notification" object:nil userInfo:@{@"value":@"我是通知传值过来的"}];
参数userInfo里面要放入需要发送的数据。这样就实现了通知传值。
四、单例传值。创建一个单例类,定义某些属性用来存储数据,在使用的时候拿出来使用,这就是单例传值。这里就不演示了。
IOS的四种传值方式到此就介绍完了,希望大家多多支持。
更多推荐
IOS的四种传值方式
发布评论