IOS開發-使用Storyboard進行介面跳轉及傳值

來源:互聯網
上載者:User

IOS開發-使用Storyboard進行介面跳轉及傳值
主題StoryBoard

前言:蘋果官方是推薦我們將所有的UI都使用Storyboard去搭建,Storyboard也是一個很成熟的工具了。使用Storyboard去搭建所有介面,我們可以很迅捷地搭建出複雜的介面,也就是說能為我們節省大量的時間。我們還可以很直觀地看出各個介面之間的關係,修改起來也很方便。將來如果遇到需要作修改的地方,我們只需要找到相對應的Storyboard就可以了,比起以前來說,快捷了不少。

建議大家實驗每一種方法時,先清空介面上的內容,以避免出現錯誤。因為初學者很容易使得介面上有殘留,具體的這裡就不說明了。接下來,讓開始我們的Storyboard之旅吧!

目錄:

一、使用Storyboard進行跳轉

1)純Storybard介面操作

2)使用代碼進行跳轉

二、Storyboard介面傳值

1)使用prepareForSegue方法進行跳轉:

2)Storyboard Id跳轉

一、使用Storyboard進行跳轉1)純Storyboard介面操作

我們在Storyboard上放置一個按扭,在按扭上方點選並按住“右鍵”不放,拖動到跳轉的下一個介面上。

鬆開右鍵後,會有一個黑色透明的彈出框,選擇跳轉的方式:

從這裡可以看到,介面和介面之間多了一條線串連,如:

我們可以在Xcode右邊的工具列看到,我們剛剛的連線操作(現在可以運行項目了):

2)使用代碼進行跳轉

我們把剛剛的連線刪除掉,如所示:

建立一個繼承於UIViewController的類CodeViewController:

選中按扭所在的介面,設定它的類檔案,預設都是繼承於UIViewController,如所示:

我們把它改成剛剛建立的類“CodeViewController”,如所示:

把介面縮小(你可以在空白的地方雙擊一下,或者右鍵選擇縮放比例),這次我們不是直接使用“按扭”串連介面,而是進行介面和介面之間的連線,如所示:

注意:100%的縮放是不能進行介面和介面之間的連線!

之後的操作和前面的一致,為了容易理解,我還是貼一:

選中“這條線”,在Storyboard Segue的Identifier指定一個標識符,後面我們會用到:

這時我們需要為按扭添加一個事件,為此需要同時顯示Storyboard和.m檔案,操作如下:

建立事件的操作和之前連線的操作一樣:

為這個事件建立一個名字,然後點擊Connect:

在事件裡添加如下代碼,把剛連線的Identifier傳進去,sender一般為"self":

[self performSegueWithIdentifier:@"EasyCode" sender:self];

這樣,就可以成功跳轉了。

二、Storyboard介面傳值1)使用prepareForSegue方法進行跳轉:

我們建立兩個類,PrepareViewController和ReceiveViewController

然後在Storyboard上建立兩個ViewController,把兩個介面串連起來。操作步驟和上方(代碼跳轉)的相同,這次我們把連線的Identifier定義為“SendValue”:

有按扭的介面的類設定為PrepareViewController,如所示:

選擇第二個介面,設定繼承的類為ReceiveViewController:

ReceiveViewController.h:

#import @interface ReceiveViewController : UIViewController@property (strong, nonatomic) NSString *name;@property (assign, nonatomic) int age;@end

ReceiveViewController.m,當然是要輸出一下啦,不然怎麼知道傳值有沒有成功:

#import "ReceiveViewController.h"@interface ReceiveViewController ()@end@implementation ReceiveViewController- (void)viewDidLoad {  [super viewDidLoad];  NSLog(@"name is %@, age is %d", _name, _age);}@end

PrepareViewController.m檔案:

#import "PrepareViewController.h"#import "ReceiveViewController.h"@interface PrepareViewController ()@end@implementation PrepareViewController- (IBAction)goAction:(id)sender{  // 根據指定線的ID跳轉到目標Vc  [self performSegueWithIdentifier:@"SendValue" sender:self];}- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {  // segue.identifier:擷取連線的ID  if ([segue.identifier isEqualToString:@"SendValue"]) {    // segue.destinationViewController:擷取連線時所指的介面(VC)    ReceiveViewController *receive = segue.destinationViewController;    receive.name = @"Garvey";    receive.age = 110;    // 這裡不需要指定跳轉了,因為在按扭的事件裡已經有跳轉的代碼//[self.navigationController pushViewController:receive animated:YES];  }}@end

可以成功接收到值啦(大功告成):

2)Storyboard Id跳轉

繼續拖兩個純淨的介面(VC)到Storyboard上,第一個介面也是放上一個UIButton:

IdViewController是我剛建立出來的類,接收值的介面用回ReceiveViewController類,指定介面繼承的類為(IdViewController、ReceiveViewController)

第二個介面設定Storyboard id為“IdReceive”,後面跳轉會用到:

IdViewController.m

- (IBAction)action:(id)sender{  // 擷取指定的Storyboard,name填寫Storyboard的檔案名稱  UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];  // 從Storyboard上按照identifier擷取指定的介面(VC),identifier必須是唯一的  ReceiveViewController *receive = [storyboard instantiateViewControllerWithIdentifier:@"IdReceive"];  receive.name = @"GC";  receive.age = 10;  [self.navigationController pushViewController:receive animated:YES];}

可以運行程式了,能夠成功接收到值,成功!

小結:你們能否看出各個方法的優點和缺點?現在沒發現不要緊,當你們以後遇上真正需要的時候,優缺點就很容易知道了,這也算是留給你們思考的一件事情吧。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.