iOS 4种传值总结
2016-01-13 19:23
399 查看
1.正向传值
场景:
A界面 创建 B界面
A-Value 》》》》》B-Value
利用属性传值:在B类中创建属性@property (copy , nonatomic)NSString *str;
然后在A中给B的对象的str赋值:
BViewController *bvc = [[BViewController alloc] init];
bvc.userName = ws.usernameTextField.text; /****正向传值****/
2.反向传值
场景:
A界面 创建 B界面
A-Value 《《《《《《B-Value
实例:配置界面中字体大小传回到A界面
block:
1).BviewController.h里定义block属性
@property (nonatomic , copy) void (^blockName)(参数类型 *参数名);
2).BviewController.m里给block提供值
self.blockName(参数);
3).在AviewController.m里,创建B的对象,
BviewController *bvc = [[BviewController alloc] init];
bvc.blockName = ^void(参数){
需要被赋值的属性 = 参数;
};
3.单例传值
场景:
一个数据需要被多个界面访问,把这个数据存储到单例中
注意:可以吧用户信息存入到单例中
好处:任意界面中存储,任何界面获取
1).创建一个单例类
UserInfo.h中添加若干属性
@property (nonatomic , copy) NSString *username;
@property (nonatomic , copy )NSString *password;
@property (nonatomic ) BOOL isLogin;
@property (nonatomic , copy) NSString *money;
2).再创建一个类UserManager,获取单例类的对象
UserManager.h
#import <Foundation/Foundation.h>
#import "UserInfo.h"
@interface UserManager : NSObject
//获取这个类的单例对象
//注意:这个方法获取的对象是唯一的,每次获取同一个对象
+ (instancetype)manager;
@property (strong , nonatomic) UserInfo *userInfo;
@end
在任意一个界面中
UserManager *manager = [UserManager manager];
manager.userInfo.isLogin = YES;
manager.userInfo.username = self.usernameTextField.text;
(如果在block中,需要在block外:
__weak typeof(self) ws = self; )
manager.userInfo.password = self.passwordTextField.text;
在另一个任意界面中,获取这个单例类对象
self.title =[NSString stringWithFormat:@"%@",[UserManager manager].userInfo.username];
4.通知传值
场景:一个界面发出消息,其他多个界面同时相应
实例:配偶之界面切换主题,其他多有界面切换主题
注意:与其他传值不同,一处发出通知,其他多出同时响应。
(只能给已创建的View传值)
场景:
A界面 创建 B界面
A-Value 》》》》》B-Value
利用属性传值:在B类中创建属性@property (copy , nonatomic)NSString *str;
然后在A中给B的对象的str赋值:
BViewController *bvc = [[BViewController alloc] init];
bvc.userName = ws.usernameTextField.text; /****正向传值****/
2.反向传值
场景:
A界面 创建 B界面
A-Value 《《《《《《B-Value
实例:配置界面中字体大小传回到A界面
block:
1).BviewController.h里定义block属性
@property (nonatomic , copy) void (^blockName)(参数类型 *参数名);
2).BviewController.m里给block提供值
self.blockName(参数);
3).在AviewController.m里,创建B的对象,
BviewController *bvc = [[BviewController alloc] init];
bvc.blockName = ^void(参数){
需要被赋值的属性 = 参数;
};
3.单例传值
场景:
一个数据需要被多个界面访问,把这个数据存储到单例中
注意:可以吧用户信息存入到单例中
好处:任意界面中存储,任何界面获取
1).创建一个单例类
UserInfo.h中添加若干属性
@property (nonatomic , copy) NSString *username;
@property (nonatomic , copy )NSString *password;
@property (nonatomic ) BOOL isLogin;
@property (nonatomic , copy) NSString *money;
2).再创建一个类UserManager,获取单例类的对象
UserManager.h
#import <Foundation/Foundation.h>
#import "UserInfo.h"
@interface UserManager : NSObject
//获取这个类的单例对象
//注意:这个方法获取的对象是唯一的,每次获取同一个对象
+ (instancetype)manager;
@property (strong , nonatomic) UserInfo *userInfo;
@end
在任意一个界面中
UserManager *manager = [UserManager manager];
manager.userInfo.isLogin = YES;
manager.userInfo.username = self.usernameTextField.text;
(如果在block中,需要在block外:
__weak typeof(self) ws = self; )
manager.userInfo.password = self.passwordTextField.text;
在另一个任意界面中,获取这个单例类对象
self.title =[NSString stringWithFormat:@"%@",[UserManager manager].userInfo.username];
4.通知传值
场景:一个界面发出消息,其他多个界面同时相应
实例:配偶之界面切换主题,其他多有界面切换主题
注意:与其他传值不同,一处发出通知,其他多出同时响应。
(只能给已创建的View传值)
相关文章推荐
- iOS真机运行,出现process launch failed: Security 错误
- iOS手势以及手势冲突问题
- iOS 导航栏全透明设置
- iOS-修改Status Bar
- ios 视频,音频,开发详解
- iOS 导航条的影响
- iOS 图片加载 圆形进度条
- IOS中延时执行的几种方式的比较和汇总
- iOS小demo之图片变灰
- iOS 雷达扫描效果 实现
- iOS 初学者关于动态按钮代码创建
- IOS viewWithTag
- iOS:实现邮件和短信发送的简单示例
- Masonry介绍与使用实践
- RDVTabBarController--可自由定制的iOS底部导航控件的使用总结
- iOS7程序后台运行
- iOS小demo之为图层添加图片和边框
- IOS开发常用的开源类库
- ios Xcode7.2下创建本地化语言Localizable.strings
- iOS:延迟加载和上拉刷新/下拉加载的实现