首页 > 系统 > iOS > 正文

汇总ios开发逆向传值的方法

2020-07-26 03:25:16
字体:
来源:转载
供稿:网友

iOS的逆向传值有很多种方法,下面来总结几种常用的传值方式(只贴相关代码):

第一种:代理传值
第二个控制器:

@protocol WJSecondViewControllerDelegate <NSObject>- (void)changeText:(NSString*)text;@end @property(nonatomic,assign)id<WJSecondViewControllerDelegate>delegate;- (IBAction)buttonClick:(UIButton*)sender {_str = sender.titleLabel.text;[self.delegate changeText:sender.titleLabel.text];[self.navigationController popViewControllerAnimated:YES];}

第一个控制器:

- (IBAction)pushToSecond:(id)sender {WJSecondViewController *svc = [[WJSecondViewController alloc]initWithNibName:@"WJSecondViewController" bundle:nil];svc.delegate = self;svc.str = self.navigationItem.title;[self.navigationController pushViewController:svc animated:YES];[svc release];}- (void)changeText:(NSString *)text{self.navigationItem.title = text;}

第二种:通知传值
第一个控制器:

 //注册监听通知 [[NSNotificationCenter defaultCenter] addObserver:self     selector:@selector(limitDataForModel:) name:@"NOV" object:nil];- (void)limitDataForModel:(NSNotification *)noti{self.gamesInfoArray = noti.object;}

第二个控制器:

//发送通知 [[NSNotificationCenter defaultCenter]   postNotificationName:@"NOV" object:gameArray];

第三种:单例传值
Single是一个单例类,并且有一个字符串类型的属性titleName
在第二个控制器:

- (IBAction)buttonClick:(UIButton*)sender {Single *single = [Single sharedSingle];single.titleName = sender.titleLabel.text;[self.navigationController popViewControllerAnimated:YES];}

第一个控制器:

- (void)viewWillAppear:(BOOL)animated{[super viewWillAppear:animated];Single *single = [Single sharedSingle];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.navigationController popViewControllerAnimated:YES];}

第一个控制器:

- (IBAction)pushToSecond:(id)sender {WJSecondViewController *svc = [[WJSecondViewController alloc]initWithNibName:@"WJSecondViewController" bundle:nil];svc.str = self.navigationItem.title;[svc setChangeText_block:^(NSString *str) {  >self.navigationItem.title = str;}];[self.navigationController pushViewController:svc animated:YES];}

第五种:extern传值
第二个控制器:

 extern NSString *btn;- (IBAction)buttonClick:(UIButton*)sender {btn = sender.titleLabel.text;[self.navigationController popViewControllerAnimated:YES];}

第一个控制器:

NSString *btn = nil;- (void)viewWillAppear:(BOOL)animated{[super viewWillAppear:animated];self.navigationItem.title = btn;}

第六种:KVO传值
第一个控制器:

- (void)viewDidLoad {[super viewDidLoad]; _vc =[[SecondViewController alloc]init];//self监听vc里的textValue属性[_vc addObserver:self forKeyPath:@"textValue" options:0 context:nil];  }

第二个控制器:

- (IBAction)buttonClicked:(id)sender {self.textValue = self.textField.text;[self.navigationController popViewControllerAnimated:YES];}

其实还有很多种传值方式,比如说NSUserDefaults,先把数据保持在本地,再读取,或者写入plist及其它类型的文件再读取等等许多方式,在这里就不一一列举了!这些代码写的时间比较久了,今天整理了一下,还比较乱,有什么不对或不足的地方请见谅!

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表