iOS 模態視圖,視圖之間的切換,ios模態

來源:互聯網
上載者:User

iOS 模態視圖,視圖之間的切換,ios模態

一、視圖之間的簡單切換。 

 視圖之間的切換實質是視圖控制器之間的切換,因為試圖控制器(UIViewController)上面都有視圖(view),試圖控制器切換了,視圖自然就實現了切換。

  建立一個工程,建立兩個類FirstViewController和SecondViewController,它們的父類都是UIViewController,還有工程裡內建的ViewController,一共三個視圖控制器。

  在每個類裡面,即在這裡的每個試圖控制器裡都寫一個如下所示touch方法,這個方法是點擊螢幕就能調用,以便我們偵錯工具。

  -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{ }

  再來設定一下每個視圖的背景顏色,就可以了,也是為了方便調試。

  

1、如果要實現ViewController到FirstViewController切換,首先在ViewController中引入FirstViewController的標頭檔。

ViewController.m裡面代碼:

- (void)viewDidLoad {

    [super viewDidLoad];

 self.view.bacgroundColor=[UIColor whiteColor];//設定成白色

}

//點擊螢幕調用此方法

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{

   FirstViewController * firstVC=[[FirsttViewController alloc]init];

   [self presentViewController:firstVC animated:YES completion:^{

        NSLog(@"present成功,從ViewController切換到FirstViewController");//此方法調用了會執行這行代碼

    }];

 }

 這樣就可以了,但是這樣的話從FirstViewController就回不到ViewController了,所以要在FirstViewController.m裡寫如下方法了。在FirstViewController裡面引入ViewController標頭檔。

- (void)viewDidLoad {

    [super viewDidLoad];

 self.view.bacgroundColor=[UIColor redColor];//設定成紅色

}

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{

   [self dismissViewControllerAnimated:YES completion:^{

        NSLog(@"dismiss成功,從FirstViewController返回到ViewController");

    }];

 }

這就實現了從ViewController到FirstViewController得來迴轉換了。

總結:要實現視圖之間的切換,要在兩個視圖控制器中分別寫如下兩個方法。

presentViewController: animated: completion:

dismissViewControllerAnimated: completion:

這兩個方法一般是一起使用,才能實現兩個視圖之間的來回切換。我們暫且說成一個present方法,一個dismiss方法。

 

2、模態視圖

   視圖控制器有一個presentModalViewController:的方法,該方法可以實現視圖切換,從當前視圖跳轉到下一個視圖,通過此方法彈出的視圖我們都稱為模態視圖,模態視圖是手機上非常常見。此方法如下:

 [self presentModelViewController: animated: completion:^{}];

 模態視圖出現的情境一般是臨時彈出的視窗,譬如:登陸視窗。

 模態視圖彈出時通過modalTransitionStyle屬性設定不同的動畫效果 。

 調用dismissModalViewControllerAnimated: 方法關閉視窗。

範例程式碼和上述大致一樣,只是模態視圖彈出時通過modalTransitionStyle屬性設定不同的動畫效果。將上述調用的方法稍作修改就可以了。

ViewController.m中

 -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{

 FirstViewController *firstVC = [[FirstViewController alloc] init]; 

 firstVC.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;//設定視圖彈出時的動畫效果

 [self presentModalViewController:firstVC animated:YES];

 }

然後在FirstViewController.m中調用

 [self dismissModelViewControllerAnimated: completion:^{   }];

 

3、以上兩種情況都是實現了試圖控制器之間的直接切換,中間沒有什麼其他東西。下面我們說如果存在導覽列控制器(UINavigationController)的情況下如何?視圖切換。

  可以在story.board裡拽一個UINavigationController,把它的根視圖設定成ViewController,將story.board裡is initial View Controller勾選√,讓程式的入口從導覽列控制器進入。

  

  其他的和1裡一樣。只是調用的方法有所改變,有導覽列控制器的情況下,調用的方法是:

  

ViewController.m中

 -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{

   FirstViewController *firstVC = [[FirstViewController alloc] init]; 

   [self.navigationController pushViewController:firstVC animated:YES];

}

這樣就行了,即使在FirstViewController.m中不寫方法,程式運行也會內建有一個按鈕返回ViewController。

點擊Back就自動返回到上一級了。

但是也可以寫一個返回方法,系統是這個方法,寫不寫的區別在下面補充裡面,個人覺得還是挺重要的關於這一點。

[self.navigationController pop...];建議自己嘗試一下。所以這裡所用的方法總結下就是一個push,一個pop。

 

補充:

  首先說一下UINavigationController有一個屬性就是viewControllers,它是一個數組,儲存導覽列控制器的所有視圖控制器,也就是一個navigationController所有的viewController都在viewControllers裡面。

  在沒有push到FirstViewController裡面的時候,FirstViewController並不是navigationController的子控制器,當push到FirstViewController後,navigationController就新添加了一個子控制器FirstViewController。viewControllers裡也就有了FirstViewController。如果不用pop方法pop回去的話,FirstViewController的navigationController就存在了,但使用了pop方法pop回去的話就又釋放掉了,navigationControllerd的viewControllers也就沒有FirstViewController了。

   注意:push和pop方法都是navigationController的方法,調用時候,一般用[self.navigationController ...];

  

  這就解釋了為什麼一個導覽列控制器只有一個根控制器,其他的控制器是怎麼添加上,怎麼去除的了。

  最後,為什麼沒用到SenconedViewController呢?留著自己再做做實驗吧。

 

初學iOS,如果有錯,還望不吝賜教。

相關文章

聯繫我們

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