傳值有以下幾種方式:
1、采用代理模式(本文使用)
2理茎、采用IOS消息機制
3黑界、通過NSDefault存儲
4管嬉、單例模式
5、控制器屬性(本文使用)
頁面切換方式:
1朗鸠、模態(tài)方式(本文使用)
2蚯撩、SwitchViewController
3、UITabBarController
4烛占、UINavigationController
PS:由于我入行較淺胎挎,很多叫法不是很專業(yè).....勿怪勿怪
- 頁面切換
- 首先,在StoryBoard中創(chuàng)建兩個View視圖并且與相應(yīng)的View Controller綁定忆家,然后填上StoryBoard ID方便獲取對象
其次犹菇,兩個View視圖中按鈕和label連線到各自的View Controller中
-
第一頁,在按鈕響應(yīng)事件中芽卿,跳轉(zhuǎn)到第二頁
//按鍵響應(yīng)事件 -(void)page1Click{ /******使用模態(tài)實現(xiàn)頁面的切換*****/ //創(chuàng)建頁面對象,通過加載storyboard揭芍,當(dāng)然如果你想用alloc init方法創(chuàng)建頁面對象,那么控制器中的組件需要通過代碼方式添加 Page2ViewController *page2View = [self.storyboard instantiateViewControllerWithIdentifier:@"page2"]; //調(diào)用presentViewController方法切換到第二頁 [self presentViewController:page2View animated:YES completion:nil]; }
-
第二頁卸例,在按鈕響應(yīng)事件中称杨,返回到第一頁
//按鍵響應(yīng)事件 -(void)page2Click{ /******模態(tài)頁面切換*******/ //直接消除該頁,也就是返回前一頁 [self dismissViewControllerAnimated:YES completion:nil]; }
***
##### 以上就完成了頁面切換筷转,接下去先看控制器屬性傳值姑原,也就是第一頁切換至第二頁的正向傳值
- 先在第二頁的.h文件里面新建一個屬性
import <UIKit/UIKit.h>
@interface Page2ViewController : UIViewController
//設(shè)置Page2ViewController的公共參數(shù)
@property (nonatomic,strong)NSString *valueFromPage1;
@end
- 在第一頁.m的按鍵響應(yīng)處
//按鍵響應(yīng)事件
-(void)page1Click{
/******使用模態(tài)實現(xiàn)頁面的切換*****/
//創(chuàng)建頁面對象,通過加載storyboard,當(dāng)然如果你想用alloc init方法創(chuàng)建頁面對象呜舒,那么控制器中的組件需要通過代碼方式添加
Page2ViewController *page2View = [self.storyboard instantiateViewControllerWithIdentifier:@"page2"];
NSLog(@"%@",self.page1_input.text);
//利用控制器公共屬性傳值
page2View.valueFromPage1 = self.page1_input.text;
//調(diào)用presentViewController方法切換到第二頁
[self presentViewController:page2View animated:YES completion:nil];
}
- 第二頁調(diào)用屬性锭汛,完成第一頁到第二頁的傳值
- (void)viewDidLoad {
[super viewDidLoad];
NSLog(@"------>>>etner page2");
//綁定按鍵響應(yīng)事件
[self.page2_btn addTarget:self action:@selector(page2Click) forControlEvents:UIControlEventTouchUpInside];
//調(diào)用屬性
self.page2_receive.text = self.valueFromPage1;
}
***
#####使用代理傳值,從第二頁反向傳遞到第一頁
- step1:在第一頁.h文件中定義一個協(xié)議和傳輸函數(shù)
- step2:在第一頁.m文件中實現(xiàn)代理
- step3:在第一頁.m文件中實現(xiàn)代理的方法
- step4:在第二頁.h文件中聲明協(xié)議
- step5: 在第二頁.h文件中創(chuàng)建一個id<MyViewDelegate>類型的delegate公共屬性
- step6:在第一頁.m文件按鈕響應(yīng)函數(shù)中將第一頁的self賦值給第二頁創(chuàng)建的delegate
- step7:在第二頁.m文件按鈕響應(yīng)函數(shù)中使用self.delegate調(diào)用代理方法袭蝗,并且傳入數(shù)值
第一頁.h
import <UIKit/UIKit.h>
//step1----------------->>>>>>>>>定義代理協(xié)議
pragma mark 定義一個協(xié)議用于參數(shù)傳遞
@protocol MyViewDelegate
-(void)passValue:(NSString *) code;
@end
@interface ViewController : UIViewController
@end
第一頁.m
import "ViewController.h"
import "Page2ViewController.h"
//step2--------------------->>>>>>>>實現(xiàn)代理
@interface ViewController ()<MyViewDelegate>
@property (weak, nonatomic) IBOutlet UITextField *page1_input;
@property (weak, nonatomic) IBOutlet UILabel *page1_receive;
@property (weak, nonatomic) IBOutlet UIButton *page1_btn;
@end
@implementation ViewController
-
(void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.//按鍵綁定響應(yīng)事件
[self.page1_btn addTarget:self action:@selector(page1Click) forControlEvents:UIControlEventTouchUpInside];
}
//按鍵響應(yīng)事件
-(void)page1Click{
/******使用模態(tài)實現(xiàn)頁面的切換*****/
//創(chuàng)建頁面對象,通過加載storyboard唤殴,當(dāng)然如果你想用alloc init方法創(chuàng)建頁面對象,那么控制器中的組件需要通過代碼方式添加
Page2ViewController *page2View = [self.storyboard instantiateViewControllerWithIdentifier:@"page2"];
NSLog(@"%@",self.page1_input.text);
//利用控制器公共屬性傳值
page2View.valueFromPage1 = self.page1_input.text;
//step6--------------------->>>>>>>>講page2ViewController中delegate賦值page1ViewController呻袭,讓Page2可以通過delegate操作page1中的代理方法
page2View.delegate = self;
//調(diào)用presentViewController方法切換到第二頁
[self presentViewController:page2View animated:YES completion:nil];
}
//step3--------------------->>>>>>>>實現(xiàn)代理方法
-(void)passValue:(NSString *)code{
self.page1_receive.text = code;
}
@end
第二頁.h
import <UIKit/UIKit.h>
//step4------------->>>>>>聲明協(xié)議
@protocol MyViewDelegate;
@interface Page2ViewController : UIViewController
//設(shè)置Page2ViewController的公共參數(shù)
@property (nonatomic,strong)NSString *valueFromPage1;
//step5-------------->>>>>>創(chuàng)建delegate參數(shù)
@property (nonatomic,strong) id<MyViewDelegate> delegate;
@end
第二頁.m
import "Page2ViewController.h"
import "ViewController.h"
@interface Page2ViewController ()
@property (strong, nonatomic) IBOutlet UITextField *page2_input;
@property (strong, nonatomic) IBOutlet UILabel *page2_receive;
@property (strong, nonatomic) IBOutlet UIButton *page2_btn;
@end
@implementation Page2ViewController
-
(void)viewDidLoad {
[super viewDidLoad];
NSLog(@"------>>>etner page2");
//綁定按鍵響應(yīng)事件
[self.page2_btn addTarget:self action:@selector(page2Click) forControlEvents:UIControlEventTouchUpInside];self.page2_receive.text = self.valueFromPage1;
}
//按鍵響應(yīng)事件
-(void)page2Click{
//step7-------------------->>>>>調(diào)用代理方法眨八。不要忘記在Page2中#import "ViewController.h"
[self.delegate passValue:self.page2_input.text];
/******模態(tài)頁面切換*******/
//直接消除該頁腺兴,也就是返回前一頁
[self dismissViewControllerAnimated:YES completion:nil];
}
@end