iOS界面?zhèn)髦涤泻芏喾N方法,我只記錄我現(xiàn)在用過的方法,方便以后查閱鞏固。
1、順傳
假如項(xiàng)目中需要從界面1條轉(zhuǎn)到界面2,且需要將界面1中的某個(gè)值傳入到界面2的某個(gè)值,這種叫順傳,則只需要在跳轉(zhuǎn)的地方給界面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:@"逆?zhèn)髦? forState:UIControlStateNormal];
[_preBtn addTarget:self action:@selector(clickedBtn) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:_preBtn];
}
界面已經(jīng)出來 點(diǎn)擊順傳值就將label的值傳入到界面2點(diǎn)label2中
實(shí)現(xiàn)方法代碼如下:
-(void)clickedBtn{
SecondViewController *secondView =[[SecondViewController alloc]init];
secondView.passDelgate = self;
NSString *text = _label1.text;
secondView.str = text;
[self presentViewController:secondView animated:YES completion:^{
}];
}
2逆?zhèn)髦担ㄍㄟ^代理)
逆?zhèn)髦狄还卜譃槲宀剑?、定義協(xié)議、定義代理方法、2、設(shè)置協(xié)議成員屬性 3、指定需要傳入到上一個(gè)界面的值 4繼承協(xié)議(包括將自己設(shè)置為代理) ?5實(shí)現(xiàn)協(xié)議方法
基于上面的界面,在界面1跳轉(zhuǎn)到界面2后,點(diǎn)擊逆?zhèn)髦敌枰獙⒔缑嫣氐浇缑?,并且需要將界面2的textfile的值傳給界面1點(diǎn)label1。此時(shí)我們就可以運(yùn)用代理傳值。
(1)在界面2的.h文件中定義協(xié)議,設(shè)置協(xié)議成員屬性。
#import//代理協(xié)議
@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)指定需要傳入的值
此時(shí)在界面2的頁面跳轉(zhuǎn)的點(diǎn)擊事件指定
//點(diǎn)擊事件實(shí)現(xiàn)方法,這里需要指定將本界面中的哪一個(gè)值傳入到上一個(gè)界面中
-(void)clickedBtn{
//指定傳哪個(gè)值
[self.passDelgate passVlaue:_textfile.text];
//界面跳轉(zhuǎn)
[self dismissViewControllerAnimated:YES completion:^{
}];
}
(3)界面1繼承協(xié)議
t#import "SecondViewController.h"
@interface ViewController : UIViewController<passValueDelegate>
@end
(4)在初始化界面2 的時(shí)候?qū)⒔缑?設(shè)置為代理
-(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)實(shí)現(xiàn)代理方法
界面1的.m文件中實(shí)現(xiàn)代理方法
-(void)passVlaue:(NSString *)values{
self.label1.text = values;
}