iOS界面传值有很多种方法,我只记录我现在用过的方法,方便以后查阅巩固。
1、顺传
假如项目中需要从界面1条转到界面2,且需要将界面1中的某个值传入到界面2的某个值,这种叫顺传,则只需要在跳转的地方给界面2中的属性赋值就好了。代码如下:
(1)定义界面1
#import "ViewController.h"
#import "SecondViewController.h"
@interface ViewController ()
@property(nonatomic,strong)UILabel * label1;
@property(nonatomic,strong)UIButton *nextBtn;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
self.view.backgroundColor = [UIColor whiteColor];
[self createUI];
}
-(void)createUI{
_label1 = [[UILabel alloc] initWithFrame:CGRectMake(100, 200, 100, 50)];
_label1.backgroundColor = [UIColor lightGrayColor];
_label1.text = @"label1";
[self.view addSubview:_label1];
_nextBtn = [[UIButton alloc] initWithFrame:CGRectMake(100, 350,100, 100)];
_nextBtn.backgroundColor = [UIColor redColor];
[_nextBtn setTitle:@"顺传值" forState:UIControlStateNormal];
[_nextBtn addTarget:self action:@selector(clickedBtn) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:_nextBtn];
}
(2)定义界面2
在界面2的.h文件中添加成员属性
@interface SecondViewController : UIViewController
@property(nonatomic,strong)UITextField *textfile;
@property(nonatomic,strong)UILabel *label2;
@property(nonatomic,strong)NSString *str;
在界面2的.m文件中初始化界面
#import "SecondViewController.h"
#import "ViewController.h"
@interface SecondViewController ()
@property(nonatomic,strong)UIButton *preBtn;
@end
@implementation SecondViewController
- (void)viewDidLoad {
[super viewDidLoad];
self.view.backgroundColor = [UIColor whiteColor];
[self createUI];
}
-(void)createUI{
_textfile = [[UITextField alloc] initWithFrame:CGRectMake(10, 50, 200, 40)];
_textfile.backgroundColor = [UIColor lightGrayColor];
_textfile.delegate = self;
_textfile.placeholder = @"请输入你想输入的字符";
[self.view addSubview:_textfile];
_label2 = [[UILabel alloc]initWithFrame:CGRectMake(50, 250, 200, 40)];
_label2.backgroundColor = [UIColor lightGrayColor];
_label2.text = str;
[self.view addSubview:_label2];
_preBtn = [[UIButton alloc] initWithFrame:CGRectMake(100, 300, 100, 100)];
_preBtn.backgroundColor = [UIColor redColor];
[_preBtn setTitle:@"逆传值" forState:UIControlStateNormal];
[_preBtn addTarget:self action:@selector(clickedBtn) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:_preBtn];
}
界面已经出来 点击顺传值就将label的值传入到界面2点label2中
实现方法代码如下:
-(void)clickedBtn{
SecondViewController *secondView =[[SecondViewController alloc]init];
secondView.passDelgate = self;
NSString *text = _label1.text;
secondView.str = text;
[self presentViewController:secondView animated:YES completion:^{
}];
}
2逆传值(通过代理)
逆传值一共分为五步:1、定义协议、定义代理方法、2、设置协议成员属性 3、指定需要传入到上一个界面的值 4继承协议(包括将自己设置为代理) 5实现协议方法
基于上面的界面,在界面1跳转到界面2后,点击逆传值需要将界面跳回到界面1,并且需要将界面2的textfile的值传给界面1点label1。此时我们就可以运用代理传值。
(1)在界面2的.h文件中定义协议,设置协议成员属性。
#import//代理协议
@protocol passValueDelegate
//代理传值方法
-(void)passVlaue:(NSString *)values;
@end
@interface SecondViewController : UIViewController
@property(nonatomic,strong)UITextField *textfile;
@property(nonatomic,strong)UILabel *label2;
//定义代理属性
@property(nonatomic,strong)id<passValueDelegate>passDelegate;
@end
(2)指定需要传入的值
此时在界面2的页面跳转的点击事件指定
//点击事件实现方法,这里需要指定将本界面中的哪一个值传入到上一个界面中
-(void)clickedBtn{
//指定传哪个值
[self.passDelgate passVlaue:_textfile.text];
//界面跳转
[self dismissViewControllerAnimated:YES completion:^{
}];
}
(3)界面1继承协议
t#import "SecondViewController.h"
@interface ViewController : UIViewController<passValueDelegate>
@end
(4)在初始化界面2 的时候将界面1设置为代理
-(void)clickedBtn{
SecondViewController *secondView =[[SecondViewController alloc]init];
secondView.passDelgate = self;
NSString *text = _label1.text;
secondView.label2.text = text;
[self presentViewController:secondView animated:YES completion:^{
}];
}
(5)实现代理方法
界面1的.m文件中实现代理方法
-(void)passVlaue:(NSString *)values{
self.label1.text = values;
}
网友评论