这一篇来说说多页面之间切换的传值方法。从最简单的说起
首先我们先搭好基础页面代码,这里我们创建了两个ViewController,并实现相互跳转的基本功能,
文件结构如下
代码如下
ViewController.h
#import <UIKit/UIKit.h>
#include "ViewControlller2.h"
@interface ViewController : UIViewController
@property(strong,nonatomic)ViewController2 *VC2;
@end
ViewController.m
#import "ViewController.h"
@implementation ViewController
- (IBAction)startToChange:(id)sender {
self.VC2=[[ViewController2 alloc]init];
[self presentViewController:self.VC2 animated:YES completion:nil];
}
@end
ViewController2.h
#import <UIKit/UIKit.h>
@interface ViewController2 : UIViewController
@property(strong,nonatomic)UIButton *returnBtn;
@end
ViewController2.m
#import "ViewControlller2.h"
@implementation ViewController2
-(void)viewDidLoad{
self.view.backgroundColor=[UIColor whiteColor];
self.returnBtn=[[UIButton alloc]initWithFrame:CGRectMake(100, 100, 200, 60)];
[self.returnBtn setTitle: @"返回" forState:UIControlStateNormal];
[self.returnBtn setTitleColor:[UIColor blueColor] forState:UIControlStateNormal];
[self.returnBtn addTarget:self action:@selector(goToViewOne) forControlEvents:1];
[self.view addSubview:self.returnBtn];
UILabel *l=[[UILabel alloc]initWithFrame:CGRectMake(150, 300,400, 60)];
l.text=@"还没有数据";
[self.view addSubview:l];
}
-(void)goToViewOne{
[self dismissViewControllerAnimated:YES completion:nil];
}
@end
效果如下
然后我们开始添加传值了。方法一是通过添加属性实现传值。
修改ViewController.m
#import "ViewController.h"
@implementation ViewController
- (IBAction)startToChange:(id)sender {
self.VC2=[[ViewController2 alloc]init];
self.VC2.data=@"lalala";
[self presentViewController:self.VC2 animated:YES completion:nil];
}
@end
修改ViewController2.h
#import <UIKit/UIKit.h>
@interface ViewController2 : UIViewController
@property(strong,nonatomic)UIButton *returnBtn;
@property(strong,nonatomic)NSString *data;//添加了这个属性
@end
修改ViewController2.m
#import "ViewControlller2.h"
@implementation ViewController2
-(void)viewDidLoad{
self.view.backgroundColor=[UIColor whiteColor];
self.returnBtn=[[UIButton alloc]initWithFrame:CGRectMake(100, 100, 200, 60)];
[self.returnBtn setTitle: @"返回" forState:UIControlStateNormal];
[self.returnBtn setTitleColor:[UIColor blueColor] forState:UIControlStateNormal];
[self.returnBtn addTarget:self action:@selector(goToViewOne) forControlEvents:1];
[self.view addSubview:self.returnBtn];
UILabel *l=[[UILabel alloc]initWithFrame:CGRectMake(150, 300,400, 60)];
l.text=self.data;//赋值
[self.view addSubview:l];
}
-(void)goToViewOne{
[self dismissViewControllerAnimated:YES completion:nil];
}
@end
看看效果(成功实现传值)
接下来看看构造函数传值
修改ViewController2.h
#import <UIKit/UIKit.h>
@interface ViewController2 : UIViewController
@property(strong,nonatomic)UIButton *returnBtn;
@property(strong,nonatomic)NSString *data;
-(instancetype)init:(NSString *)value;
@end
修改ViewController2.m
#import "ViewControlller2.h"
@implementation ViewController2
-(void)viewDidLoad{
self.view.backgroundColor=[UIColor whiteColor];
self.returnBtn=[[UIButton alloc]initWithFrame:CGRectMake(100, 100, 200, 60)];
[self.returnBtn setTitle: @"返回" forState:UIControlStateNormal];
[self.returnBtn setTitleColor:[UIColor blueColor] forState:UIControlStateNormal];
[self.returnBtn addTarget:self action:@selector(goToViewOne) forControlEvents:1];
[self.view addSubview:self.returnBtn];
UILabel *l=[[UILabel alloc]initWithFrame:CGRectMake(150, 300,400, 60)];
l.text=self.data;
[self.view addSubview:l];
}
-(void)goToViewOne{
[self dismissViewControllerAnimated:YES completion:nil];
}
-(instancetype)init:(NSString *)value{
self=[super init];
self.data=value;
return self;
}
@end
修改ViewController.m
#import "ViewController.h"
@implementation ViewController
- (IBAction)startToChange:(id)sender {
self.VC2=[[ViewController2 alloc]init:@"构造函数传值"];
[self presentViewController:self.VC2 animated:YES completion:nil];
}
@end
看看效果(成功传值)
正向传值已经介绍了两种,接下来我们看看反向的传值,这种传值方法主要通过协议来实现,我们先创建DataSendProtocol.h
@protocol DataSendingDelegate <NSObject>
- (void)giveBackData:(NSString*)value;
@end
修改ViewController2.h
#import <UIKit/UIKit.h>
#include "DataSendingProtocol.h"
@interface ViewController2 : UIViewController
@property (strong, nonatomic) id<DataSendingDelegate> m_delegate;
@property(strong,nonatomic)UIButton *returnBtn;
@end
修改ViewController2.m
#import "ViewControlller2.h"
@implementation ViewController2
@synthesize m_delegate = _m_delegate;
-(void)viewDidLoad{
self.view.backgroundColor=[UIColor whiteColor];
self.returnBtn=[[UIButton alloc]initWithFrame:CGRectMake(100, 100, 200, 60)];
[self.returnBtn setTitle: @"返回" forState:UIControlStateNormal];
[self.returnBtn setTitleColor:[UIColor blueColor] forState:UIControlStateNormal];
[self.returnBtn addTarget:self action:@selector(goToViewOne) forControlEvents:1];
[self.view addSubview:self.returnBtn];
}
-(void)goToViewOne{
[self dismissViewControllerAnimated:YES completion:nil];
[self.m_delegate giveBackData:@"返回数据"];
}
@end
修改ViewController.m
#import "ViewController.h"
@interface ViewController()<DataSendingDelegate>
@end
@implementation ViewController
- (IBAction)startToChange:(id)sender {
self.VC2=[[ViewController2 alloc]init];
self.VC2.m_delegate=self;
[self presentViewController:self.VC2 animated:YES completion:nil];
}
-(void)giveBackData:(NSString *)value{
NSLog(value);
}
@end
看看效果
就到这里了,DRW