汇总ios开发逆向传值的方法
iOS的逆向传值有很多种方法,下面来总结几种常用的传值方式(只贴相关代码):
第一种:代理传值
第二个控制器:
@protocolWJSecondViewControllerDelegate<NSObject>
-(void)changeText:(NSString*)text;
@end
@property(nonatomic,assign)id<WJSecondViewControllerDelegate>delegate;
-(IBAction)buttonClick:(UIButton*)sender{
_str=sender.titleLabel.text;
[self.delegatechangeText:sender.titleLabel.text];
[self.navigationControllerpopViewControllerAnimated:YES];
}
第一个控制器:
-(IBAction)pushToSecond:(id)sender{
WJSecondViewController*svc=[[WJSecondViewControlleralloc]initWithNibName:@"WJSecondViewController"bundle:nil];
svc.delegate=self;
svc.str=self.navigationItem.title;
[self.navigationControllerpushViewController:svcanimated:YES];
[svcrelease];
}
-(void)changeText:(NSString*)text{
self.navigationItem.title=text;
}
第二种:通知传值
第一个控制器:
//注册监听通知
[[NSNotificationCenterdefaultCenter]addObserver:selfselector:@selector(limitDataForModel:)name:@"NOV"object:nil];
-(void)limitDataForModel:(NSNotification*)noti{
self.gamesInfoArray=noti.object;
}
第二个控制器:
//发送通知 [[NSNotificationCenterdefaultCenter]postNotificationName:@"NOV"object:gameArray];
第三种:单例传值
Single是一个单例类,并且有一个字符串类型的属性titleName
在第二个控制器:
-(IBAction)buttonClick:(UIButton*)sender{
Single*single=[SinglesharedSingle];
single.titleName=sender.titleLabel.text;
[self.navigationControllerpopViewControllerAnimated:YES];
}
第一个控制器:
-(void)viewWillAppear:(BOOL)animated{
[superviewWillAppear:animated];
Single*single=[SinglesharedSingle];
self.navigationItem.title=single.titleName;
}
第四种:block传值
第二个控制器:
@property(nonatomic,copy)void(^changeText_block)(NSString*);
-(IBAction)buttonClick:(UIButton*)sender{
_str=sender.titleLabel.text;
self.changeText_block(sender.titleLabel.text);
[self.navigationControllerpopViewControllerAnimated:YES];
}
第一个控制器:
-(IBAction)pushToSecond:(id)sender{
WJSecondViewController*svc=[[WJSecondViewControlleralloc]initWithNibName:@"WJSecondViewController"bundle:nil];
svc.str=self.navigationItem.title;
[svcsetChangeText_block:^(NSString*str){
>self.navigationItem.title=str;
}];
[self.navigationControllerpushViewController:svcanimated:YES];
}
第五种:extern传值
第二个控制器:
externNSString*btn;
-(IBAction)buttonClick:(UIButton*)sender{
btn=sender.titleLabel.text;
[self.navigationControllerpopViewControllerAnimated:YES];
}
第一个控制器:
NSString*btn=nil;
-(void)viewWillAppear:(BOOL)animated{
[superviewWillAppear:animated];
self.navigationItem.title=btn;
}
第六种:KVO传值
第一个控制器:
-(void)viewDidLoad{
[superviewDidLoad];
_vc=[[SecondViewControlleralloc]init];
//self监听vc里的textValue属性
[_vcaddObserver:selfforKeyPath:@"textValue"options:0context:nil];
}
第二个控制器:
-(IBAction)buttonClicked:(id)sender{
self.textValue=self.textField.text;
[self.navigationControllerpopViewControllerAnimated:YES];
}
其实还有很多种传值方式,比如说NSUserDefaults,先把数据保持在本地,再读取,或者写入plist及其它类型的文件再读取等等许多方式,在这里就不一一列举了!这些代码写的时间比较久了,今天整理了一下,还比较乱,有什么不对或不足的地方请见谅!