iOS——使用StroryBoard頁面跳轉及傳值

來源:互聯網
上載者:User

標籤:des   android   style   blog   http   io   ar   color   os   

  之前在網上搜iOS的頁面跳轉大多都是按回以前的那種xib的形式,但鄙人是使用storyboard的。這篇就只介紹利用storyboard進行頁面跳轉與傳值。

建立頁面

  iOS的程式也是使用了MVC的思想,分頁檔與代碼檔案是分離的,這點與Android的類似。在使用storyboard的方式中,建立頁面只需要在storyboard中拖入一個View Controller則可,

接下來就可以在建立的頁面中添加各種控制項來編輯這個建立的頁面。

  在建立的頁面上編排各種視圖控制項如同在Android中編輯那個布局的xml,但是要讓程式碼與這個視圖關聯,需要做一些操作。首先必不可少是建立一個相關聯的類,此時需要建立一個Objective-C的class,基類就選擇對應的View Controller基類,這裡就最簡單的UIViewController,With XIB for user Interface那個複選框不能勾,點擊完成便可成功建立一個View Controller。

回到stroyboard視圖,選擇剛剛建立的視圖頁面,點擊的紅框框住的部分

在紅框處選擇對應的View Controller,這樣就把視圖與程式碼檔案View Controller關聯上了

頁面跳轉

  建立完新頁面就可以進行頁面間的跳轉,最簡單的跳轉則是用類似建立控制項Outlet或者綁定事件一樣,按住Ctrl鍵然後拖動到要跳轉到的頁面上,然後在彈出的視窗選擇modal

在運行程式後點擊按鈕就可以實現跳轉。

      另一種跳轉的方式則是在起始頁面按著Ctrl鍵然後拖動到目標頁面中,快顯視窗的選項跟上面的一樣,然後選中兩個頁面連線,在紅框處給這個Segue命名

,最後在View Controller想觸發跳轉的地方(就比如點擊按鈕,則在按鈕的點擊事件的方法中)添加下面代碼

[self performSegueWithIdentifier:@“segue的名” sender:nil]; 

則可實現跳轉

      跳轉到新的頁面後要返回上一個頁面,則在需要返回的地方添加以下代碼

[self dismissModalViewControllerAnimated:true];

參數true與false代表的是跳轉的頁面的切換時是否使用動畫

頁間傳值

      頁面間值的傳遞最簡單的方式是定義一個全域變數,無論是跳轉還是返回,都可從該變數中get/set到值,如果不用這種方式,跳轉時傳值可以使用prepareForSegue sender 方法,返回時可以使用協議的方式,下面分別來看看。

  使用prepareForSegue sender 方法來傳遞值,需要先在目標頁面的View Controller的類聲明處聲明傳遞參數的屬性,比如那個屬性就叫value1吧,接著在起始頁的地方實現方法

-(void) prepareForSegue: (UIStoryBoardSegue *)segue sender: (id){       if([segue.identifier compare:@"mySegue"]==NO)    {        id page2=segue.destinationViewController;        [page2 setValue:self.lbUserName2.text forKey:@"value1"];    }}

起到傳值作用是 setValue forKey的方法,segue的destinationViewController可以擷取到當前Segue所跳到的目標頁面的View Controller。這裡有一個判斷,用於判別這個跳轉動作的segue是否是需要傳值的那個segue,因為如果一個頁面會有多個Segue跳轉到不同的頁面,不這樣區分,在目標頁面的View Controller中沒有相應的參數時則會拋出異常。

      採用協議的方式進行返回時傳值,思想是這樣的,定義相關的協議,協議是給起始頁實現的,目的在於開放一些供賦值的方法給目標頁面調用,目標頁面在返回的時候就調用那些方法來把傳回值傳回給起始頁面,目標頁面如何擷取起始頁的執行個體呢,那就通過頁面上面的setValue forKey方法來傳值,下面給一個樣本

定義協議

@protocol HGReturnView1Delegate <NSObject>-(void) setReturnText:(NSString *) value;@end

起始頁面需要實現該協議,實現部分的代碼就不貼出來了。目標頁的聲明處需要定義一個上面的協議屬性

@property (weak,nonatomic) id delegate;

在頁面跳轉時傳值時就調用以下代碼

[self setValue:self forKey:@”delegate”];

在返回的時候需要用到delegate屬性進行強制轉換,轉換後調用setReturnText方法

NSObject<HGReturnView1Delegate> *tmpDele=self.delegate;[tmpDele setReturnText: self.txtReturn.text];

 

iOS——使用StroryBoard頁面跳轉及傳值

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.