汇总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及其它类型的文件再读取等等许多方式,在这里就不一一列举了!这些代码写的时间比较久了,今天整理了一下,还比较乱,有什么不对或不足的地方请见谅!