多界面传值
在切换不同的ViewController
视图控制器时,通过某些方法将A视图控制器中想要的某些数据传输到B视图控制器中
属性传值
属性传值最大的特点就是正向传值,即A页面传值给B页面
第一步:
- 既然是属性传值,传值给B,那么,就在B的.h文件里声明一个属性(之所以在B.h中声明,是因为在B.h中声明的属性在A的文件里,在新创建B视图控制器后也可以访问)
# B.m文件中
@property (nonatomic,copy) NSString *sendText;
- 利用这个
NSString
,可以将拿到的值赋给B中的Label
、textfield
等
第二步:
- 在A.m中进行给B的属性赋值并跳转控制器
-(void)ASendMessageToB {
BViewController* bViewController = [[BViewController alloc] init];
//获取Bvc就可以拿到B中的属性,并在A控制器里赋值了
bViewController.sendText = self.label.text; //这个就是需要传给B控制器的值,根据需要自己赋值
//跳转控制器
[self presentViewController:bViewController animated:YES completion:nil];
- 注意要在A的文件中创建一个新的B视图控制器,这样才能正常访问B的
sendText
属性,并对其进行赋值
第三步:
- 此时在B文件中的
self.sendText
属性已经被赋值了,已经传值完毕,再根据需要进行使用
协议传值
属性传值最大的特点就是反向传值,即B页面传值给A页面
第一步
- 创建协议
@protocol SecondViewControllerDelegate<NSObject>
//传值的方法一般都带一个或者多个参数
-(void)passValue:(NSString *)string
第二步:
- 创建一个代理人属性 用来执行协议
@property(nonatomic,assign)id<SecondViewControllerDelegate>delegate;
- 注意要用
assign
关键字来添加delegate
属性
第三步:
- 在合适的位置设定好代理 delegate的对象执行协议方法
[self.delegate passValue:self.text.field.text];
第四步:
- 遵循协议,在被传值的视图控制器文件遵循上述协议
@interface MainViewController ()<SecondViewControllerDelegate>
第五步:
- 设置第二个页面的代理人
secondVC.delegate = self;
[self.navigationController pushViewController:secondVC animated:YES];
[secondVC releas
第六步:
- 实现相应的协议方法
- (void)passValue:(NSString *)string
{
// 利用传过来的string参数 给自己的空间赋值
UIButton *button = (UIButton *)[self.view viewWithTag:10000];
self.title = string;
[button setTitle:string forState:UIControlStateNormal];
}
记住传输的是什么类型,这里就写什么类型