ios 正向传值反向传值 20
ios有几种传值方式哪种可以正向传值哪种可以反向传值各自都怎么使用有什么不同哪几种传值方式可以通用他们都什么时候使用...
ios 有几种传值方式 哪种可以正向传值 哪种可以反向传值 各自都怎么使用 有什么不同 哪几种传值方式可以通用 他们都什么时候使用
展开
- 你的回答被采纳后将获得:
- 系统奖励15(财富值+成长值)+难题奖励10(财富值+成长值)+提问者悬赏20(财富值+成长值)
若以下回答无法解决问题,邀请你更新回答
1个回答
展开全部
正向传值:
一、利用present 的 block 块进行正向传值
RootViewController.m中:
SubViewController * svc = [[SubViewControlleralloc]init];
//svc.label.text = @"正向Block传值";
//这句是正向的属性传值,作用是让B页面,能持有A页面的地址,因B要向A进行反向传值
//想给谁传值,就要持有谁的地址
svc.delegate =self;
[selfpresentViewController:svc animated:YEScompletion:^{
svc.label.text =@"正向Block传值";
}];
二、利用AB页面中的属性传值
反向传值:
一、利用block来进行 b界面向 a 界面反向传值
a 中声明一个 block属性,将所要传的值放入block 函数指针中,b去接收
.h文件
@property(nonatomic,copy)void(^blockColor) (UIColor *);
.m文件
self.blockColor([UIColor blackColor]);
注意用 copy
b.m文件中 接收
svc.blockColor = ^(UIColor *color){
self.view.backgroundColor = color;
};
二、通知中心和观察者模式反向传值
例: viewController1向 viewController2传值
1.
Appdelegate 文件中,有一个接收所要传递的值的变量,用来保存所要传递的数据,界面1写入,界面2读取
@property (nonatomic,copy)NSString *string;
2.
viewController1中,当要传值的时候(按钮按下时),将数据通过UIApplication单例获取到的Appdelegate *delegate,传入Appdelegate文件中。同时向通知中心发送一个广播
[[NSNotificationCenter defaultCenter] postNotificationName:@"鬼子来了" object:nil];
3.
viewController2 中,向通知中心注册,添加自己,成为观察者。当数据改变时,用单例delegate 读取数据
-(void)becomObserver
{
//获得通知中心,注册成观察者
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(changeText) name:@"鬼子来了" object:nil];
}
//收到广播消息后调用的方法
-(void)changeText
{
//首先获取appDelegate的对象
AppDelegate * appDeleagte = [UIApplication sharedApplication].delegate;
NSString * string = appDeleagte.string;
NSLog(@"sss:%@",string);
label.text = appDeleagte.string;
NSLog(@"label.txt = %@",label.text);
}
三、利用协议,界面反向传值
AppDelegate
viewController2为委托方,viewController1为代理,
在viewController2中委托方制定协议,并且属性delegate = viewController1,要遵循协议;
在viewController1中,将viewController2对象的属性delegate设为自己(vc1)
1.ViewController1.m
vc2.delegate = self;
2.ViewController2.h文件
//委托方制定协议,代理人必须遵守
@protocol BackValueDelegate<NSObject>
-(void)changeText:(NSString *)string
@end
@interface ViewController1 :UIViewController
//用来设置代理,并且遵守协议
@property (nonatomic,retain) id<BackValueDelegate>delegate;
@end
3. ViewController2.m文件
//利用代理去回传数据
[self.delegate changeText:@"****"];
四、用系统自带的UIApplication单例进行传值
五、用自己实现的单例进行传值
六、用TargetAction 的方式进行两个界面来回反复调用传值
一、利用present 的 block 块进行正向传值
RootViewController.m中:
SubViewController * svc = [[SubViewControlleralloc]init];
//svc.label.text = @"正向Block传值";
//这句是正向的属性传值,作用是让B页面,能持有A页面的地址,因B要向A进行反向传值
//想给谁传值,就要持有谁的地址
svc.delegate =self;
[selfpresentViewController:svc animated:YEScompletion:^{
svc.label.text =@"正向Block传值";
}];
二、利用AB页面中的属性传值
反向传值:
一、利用block来进行 b界面向 a 界面反向传值
a 中声明一个 block属性,将所要传的值放入block 函数指针中,b去接收
.h文件
@property(nonatomic,copy)void(^blockColor) (UIColor *);
.m文件
self.blockColor([UIColor blackColor]);
注意用 copy
b.m文件中 接收
svc.blockColor = ^(UIColor *color){
self.view.backgroundColor = color;
};
二、通知中心和观察者模式反向传值
例: viewController1向 viewController2传值
1.
Appdelegate 文件中,有一个接收所要传递的值的变量,用来保存所要传递的数据,界面1写入,界面2读取
@property (nonatomic,copy)NSString *string;
2.
viewController1中,当要传值的时候(按钮按下时),将数据通过UIApplication单例获取到的Appdelegate *delegate,传入Appdelegate文件中。同时向通知中心发送一个广播
[[NSNotificationCenter defaultCenter] postNotificationName:@"鬼子来了" object:nil];
3.
viewController2 中,向通知中心注册,添加自己,成为观察者。当数据改变时,用单例delegate 读取数据
-(void)becomObserver
{
//获得通知中心,注册成观察者
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(changeText) name:@"鬼子来了" object:nil];
}
//收到广播消息后调用的方法
-(void)changeText
{
//首先获取appDelegate的对象
AppDelegate * appDeleagte = [UIApplication sharedApplication].delegate;
NSString * string = appDeleagte.string;
NSLog(@"sss:%@",string);
label.text = appDeleagte.string;
NSLog(@"label.txt = %@",label.text);
}
三、利用协议,界面反向传值
AppDelegate
viewController2为委托方,viewController1为代理,
在viewController2中委托方制定协议,并且属性delegate = viewController1,要遵循协议;
在viewController1中,将viewController2对象的属性delegate设为自己(vc1)
1.ViewController1.m
vc2.delegate = self;
2.ViewController2.h文件
//委托方制定协议,代理人必须遵守
@protocol BackValueDelegate<NSObject>
-(void)changeText:(NSString *)string
@end
@interface ViewController1 :UIViewController
//用来设置代理,并且遵守协议
@property (nonatomic,retain) id<BackValueDelegate>delegate;
@end
3. ViewController2.m文件
//利用代理去回传数据
[self.delegate changeText:@"****"];
四、用系统自带的UIApplication单例进行传值
五、用自己实现的单例进行传值
六、用TargetAction 的方式进行两个界面来回反复调用传值
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询