iOS开发中的常见的几种逆向传值方式
来源:互联网 发布:飞鹰编辑软件 编辑:程序博客网 时间:2024/05/16 12:07
传值(两个页面之间的传值或者两个VC之间传值)
绝对禁止给成员变量用类方法赋值,因为无法控制。
一、正向传值看点击打开链接(界面1和4之间的传值。)
简单的说就是在需要得到值的类中做一个属性,用来接受将要传来的值。
在赋值界面实例化当前界面并调用属性赋值。(赋值一定要在push界面之前进行。)
到了得值界面调用 “得值变量 = self.属性”进行传值。
二、今天主要看反向传值
1.代理传值------随便用---一对一,触发与被触发两个类之间的传值,途径协议方法的参数。(被block代替了)---------相册
在第二个页面声明代理和协议方法,并将其作为属性。
#import<UIKit/UIKit.h>
@protocol SecondDelegate <NSObject>
//改变first里面label所显示的内容,改为newStr。
-(void)changeTextTo:(NSString *)newStr;
@end
@interface SecondViewController :UIViewController<UITextFieldDelegate>
@property(nonatomic,assign)id<SecondDelegate>delegate;
@end
然后在.m文件中想要传值的控件写:textField1.delegate =self;
然后在第一个页面中包含协议方法,最后实现协议方法。second.delegate = self;把自己给了第二个页面,//second.delegate调用协议方法时,就相当于self在调用,所以用first这个页面实现
源码参考:点击打开链接
核心就在“触发类.delegate = self ”,把当前类赋给协议属性。所以在self中实现协议方法。
2.单例传值-------随便用(单例属性赋值后,哪儿都可以用。)-------判断系统版本,已设定起始Y坐标(继承)
建一个单例类,如果有必要,可以加一个需要的属性。
Eg:
.h文件:
@property(nonatomic,retain)NSString *newStr;
+(id)shareInstance;
.m文件:
staticValue *value = nil;
@implementation Value
-(void)dealloc
{
self.newStr = nil;
[superdealloc];
}
+(id)shareInstance
{
static dispatch_once_t onceToken ;
dispatch_once(&onceToken, ^{
value = [Value alloc];
});
return value;
}
@end
然后再传值页面包含类,实例化,给其赋值
Value *value = [Value shareInstance];
value.newStr =@"中午吃饭不要钱";
然后在接受页面同样实例化单例类:
然后接到value.newStr值就传过来了。
详细参考代码: 点击打开链接
3.NSuserDefaults传值(一般只用在保存账号密码,登录状态,针对小数据,如果大了,不让上线。)-----做一个保存账号密码、下次再启动应用自动登录。
第一个页面执行写入需要的东西:
NSUserDefaults *user = [NSUserDefaultsstandardUserDefaults];
[usersetObject:@"china55lllz@hotmail.com"forKey:@"count"];
[usersetObject:@"111111"forKey:@"password"];
[user synchronize];
取回页面执行如下操作:
NSUserDefaults *user = [NSUserDefaultsstandardUserDefaults];
NSString *str = [user objectForKey:@"count"];//可以根据需求将值写在页面上。
详细参考:
点击打开链接
4.文件传值--------本地持久化(离线的工作,把服务器取回来的数据存在本地沙盒目录下,然后下次直接读文件取用。任何情况下,你有一个数据想给别的类用,可以把这个数据write到文件,然后别的类读这个文件。)
5.通知传值(一个发起者,一堆接收者,不需要协议,直接通过系统的通知中心工作notificationCenter)
在传值页面执行如下代码发通知:
NSNotificationCenter *center = [NSNotificationCenterdefaultCenter];
//第二个参数object是我们要传的值,接受那边会受到这个值。,这个参数必须是对象。[NSString stringWithFormat:@"%d",num]就是发出去的值.
NSNotification *notify = [NSNotificationnotificationWithName:@"zengzhiwei"object:[NSStringstringWithFormat:@"%d",num]];
[center postNotification:notify];
在接收页面:
NSNotificationCenter *center = [NSNotificationCenter defaultCenter];
[center addObserver:self selector:@selector(secondDoWithNotification:) name:@"zengzhiwei" object:nil];
//第一个参数是目标(将要干活的对象),第二个参数是方法(要干的活),第三个参数是我正在观察的内容,要与发出者一致,第四个参数是观察者的参数,是给中心用的,我们暂时不关心。
//因为这次发送的zengzhiwei是带参数的,(执行对应方法。)
-(void)secondDoWithNotification:(NSNotification *)notice
{
NSString *object = [notice object];//把收到的通知参数转为字符串。
if([object intValue ] == 0 )
{
//删上面的按钮
UIButton *btn = (UIButton *)[self.view viewWithTag:1000];
[btn removeFromSuperview];
}else{
//删下面的按钮
UIButton *btn = (UIButton *)[self.view viewWithTag:1001];
[btn removeFromSuperview];
}
}
详细参考源码:点击打开链接
- iOS开发中的常见的几种逆向传值方式
- iOS开发--常见的退出键盘的几种方式
- iOS 初学笔记之常见的几种界面传值方式
- Android开发之Handler(五)几种常见的传值方式
- Android开发之Handler(五)几种常见的传值方式
- iOS开发的几种加密方式
- iOS中常见的几种存储方式
- iOS 几种常见的数据储存方式
- iOS网络请求中常见的几种方式
- iOS的逆向传值有很多种方法,下面来总结几种常用的传值方式(只贴相关代码):
- Android的Handler几种常见的传值方式
- iOS开发中的细节键盘的影藏的几种方式
- iOS常见的传值方式
- iOS-常见的页面传值方式
- IOS中的几种动画的实现方式
- IOS开发中页面跳转的几种方式
- iOS开发-键盘消失的几种方式
- 【iOS开发系列】延时执行的几种方式
- C++学习篇(一)---初始C++
- Linux之vi、grep、sed、awk
- day13,page40,total440
- nyoj 45 棋盘覆盖 【Java大数】
- 23状态模式
- iOS开发中的常见的几种逆向传值方式
- 不改变相对顺序,负数左边正数右边
- android anr分析方法
- exp/imp碰到的两则问题处理(ORA-00904和the objects were exported by ABC not by you)
- Java Eclipse环境搭建以及创建Hello world程序
- 24合成模式
- Android Uid和Pid区别。
- Android 模拟系统事件(二)
- 跟曾国藩学读书