iOS界面?zhèn)髦涤泻芏喾N方法,我只記錄我現(xiàn)在用過的方法,方便以后查閱鞏固。
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:@"逆?zhèn)髦? forState:UIControlStateNormal];
[_preBtn addTarget:self action:@selector(clickedBtn) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:_preBtn];
}
界面已經(jīng)出來 點擊順傳值就將label的值傳入到界面2點label2中
實現(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、設置協(xié)議成員屬性 3、指定需要傳入到上一個界面的值 4繼承協(xié)議(包括將自己設置為代理) ?5實現(xiàn)協(xié)議方法
基于上面的界面,在界面1跳轉到界面2后,點擊逆?zhèn)髦敌枰獙⒔缑嫣氐浇缑?,并且需要將界面2的textfile的值傳給界面1點label1。此時我們就可以運用代理傳值。
(1)在界面2的.h文件中定義協(xié)議,設置協(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)指定需要傳入的值
此時在界面2的頁面跳轉的點擊事件指定
//點擊事件實現(xiàn)方法,這里需要指定將本界面中的哪一個值傳入到上一個界面中
-(void)clickedBtn{
//指定傳哪個值
[self.passDelgate passVlaue:_textfile.text];
//界面跳轉
[self dismissViewControllerAnimated:YES completion:^{
}];
}
(3)界面1繼承協(xié)議
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)實現(xiàn)代理方法
界面1的.m文件中實現(xiàn)代理方法
-(void)passVlaue:(NSString *)values{
self.label1.text = values;
}