IOS學(xué)習(xí)之頁面切換與傳值

  • 傳值有以下幾種方式:

  • 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方便獲取對象
屏幕快照 2016-10-20 上午10.25.10.png
  • 其次犹菇,兩個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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末左电,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子页响,更是在濱河造成了極大的恐慌篓足,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,548評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件闰蚕,死亡現(xiàn)場離奇詭異栈拖,居然都是意外死亡,警方通過查閱死者的電腦和手機没陡,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,497評論 3 399
  • 文/潘曉璐 我一進店門涩哟,熙熙樓的掌柜王于貴愁眉苦臉地迎上來索赏,“玉大人,你說我怎么就攤上這事贴彼∏蹦澹” “怎么了?”我有些...
    開封第一講書人閱讀 167,990評論 0 360
  • 文/不壞的土叔 我叫張陵器仗,是天一觀的道長融涣。 經(jīng)常有香客問我,道長精钮,這世上最難降的妖魔是什么威鹿? 我笑而不...
    開封第一講書人閱讀 59,618評論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮轨香,結(jié)果婚禮上忽你,老公的妹妹穿的比我還像新娘。我一直安慰自己臂容,他們只是感情好檀夹,可當(dāng)我...
    茶點故事閱讀 68,618評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著策橘,像睡著了一般炸渡。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上丽已,一...
    開封第一講書人閱讀 52,246評論 1 308
  • 那天蚌堵,我揣著相機與錄音,去河邊找鬼沛婴。 笑死吼畏,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的嘁灯。 我是一名探鬼主播泻蚊,決...
    沈念sama閱讀 40,819評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼丑婿!你這毒婦竟也來了性雄?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,725評論 0 276
  • 序言:老撾萬榮一對情侶失蹤羹奉,失蹤者是張志新(化名)和其女友劉穎秒旋,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體诀拭,經(jīng)...
    沈念sama閱讀 46,268評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡迁筛,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,356評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了耕挨。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片细卧。...
    茶點故事閱讀 40,488評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡尉桩,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出贪庙,到底是詐尸還是另有隱情魄健,我是刑警寧澤,帶...
    沈念sama閱讀 36,181評論 5 350
  • 正文 年R本政府宣布插勤,位于F島的核電站沽瘦,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏农尖。R本人自食惡果不足惜析恋,卻給世界環(huán)境...
    茶點故事閱讀 41,862評論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望盛卡。 院中可真熱鬧助隧,春花似錦、人聲如沸滑沧。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,331評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽滓技。三九已至哩牍,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間令漂,已是汗流浹背膝昆。 一陣腳步聲響...
    開封第一講書人閱讀 33,445評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留叠必,地道東北人荚孵。 一個月前我還...
    沈念sama閱讀 48,897評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像纬朝,于是被迫代替她去往敵國和親收叶。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,500評論 2 359

推薦閱讀更多精彩內(nèi)容