最正经的页面间传值方式莫过于代理传值,今天写的几种小方法不包括代理传值,因为是自学的原因,现在都不知道这几种方法的优缺点,往知道的朋友指正一下;
第一种:属性传值;(这种方法在故事版无效,适合纯代码编写时使用,为什么???)
前提:比如说有两个视图控制器:AViewController和BViewController,他们之间想从A传值到B,
——》在AViewController.m文件中
(1)导入BViewController
#import "BViewController.h"
(2)定义全局变量
比如:我们在A中加一个UITextfield控件,将他的值传递到B
@property (nonatomic, strong) UITextField *text;
(3)需要传值的地方编码
BViewController *Bvc = [[BViewController alloc] initWithNibName:nil bundle:nil];
//赋值
Bvc.chuanzhi = text.text;
//跳转
[self.navigationController pushViewController:Bvc animated:YES];
——》在BVIewController.h文件中
定义上一步编码时,赋值时Bvc.chuanzhi 的变量就是我们需要在.h文件中定义的;
@property (nonatomic, strong) NSString *chuanzhi;
——》在BViewController.m文件中
这样我们就可以在B中随处使用传递过来的值;
第二种:segue传值;
前提:比如说有两个视图控制器:AViewController和BViewController,他们之间想从A传值到B,它们之间的连线Identifier:aTob
——》AViewController.m文件中
(1)打开下面这个方法
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
(2)在其中进行传值
// In a storyboard-based application, you will often want to do a little preparation before navigation
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
if([segue.identifier isEqualToString:@"aTob"])
{
id theSegue = segue.destinationViewController;
//赋值
[theSegue setValue:@"A页面的值" forKey:@"自己的KEY"];
}
}
——》在BviewController中的操作和上一种方法一样
第三种:用NSUserDefaults传值;
——》AViewController中
需要传值的地方编码
//存储数据
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setObject:@"A界面需要传递的值" forKey:@"自己的KEY"];
//设置同步
[defaults synchronize];
——》BViewController文件中
在ViewDidLoad中编码读取传递过来的值
//读取A界面传递过来的值
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
self.userId = [defaults valueForKey:@"自己的KEY"];