麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

iOS模態(tài)視圖,視圖之間的切換

2019-11-14 19:23:44
字體:
供稿:網(wǎng)友

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

 視圖之間的切換實(shí)質(zhì)是視圖控制器之間的切換,因?yàn)樵噲D控制器(UIViewController)上面都有視圖(view),試圖控制器切換了,視圖自然就實(shí)現(xiàn)了切換。

  新建一個(gè)工程,創(chuàng)建兩個(gè)類FirstViewController和SecondViewController,它們的父類都是UIViewController,還有工程里自帶的ViewController,一共三個(gè)視圖控制器。

  在每個(gè)類里面,即在這里的每個(gè)試圖控制器里都寫一個(gè)如下所示touch方法,這個(gè)方法是點(diǎn)擊屏幕就能調(diào)用,以便我們調(diào)試程序。

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

  再來設(shè)置一下每個(gè)視圖的背景顏色,就可以了,也是為了方便調(diào)試。

  

1、如果要實(shí)現(xiàn)ViewController到FirstViewController切換,首先在ViewController中引入FirstViewController的頭文件。

ViewController.m里面代碼:

- (void)viewDidLoad {

    [super viewDidLoad];

 self.view.bacgroundColor=[UIColor whiteColor];//設(shè)置成白色

}

//點(diǎn)擊屏幕調(diào)用此方法

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

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

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

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

    }];

 }

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

- (void)viewDidLoad {

    [super viewDidLoad];

 self.view.bacgroundColor=[UIColor redColor];//設(shè)置成紅色

}

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

   [self dismissViewControllerAnimated:YES completion:^{

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

    }];

 }

這就實(shí)現(xiàn)了從ViewController到FirstViewController得來回轉(zhuǎn)換了。

總結(jié):要實(shí)現(xiàn)視圖之間的切換,要在兩個(gè)視圖控制器中分別寫如下兩個(gè)方法。

presentViewController: animated: completion:

dismissViewControllerAnimated: completion:

這兩個(gè)方法一般是一起使用,才能實(shí)現(xiàn)兩個(gè)視圖之間的來回切換。我們暫且說成一個(gè)present方法,一個(gè)dismiss方法。

 

2、模態(tài)視圖

   視圖控制器有一個(gè)presentModalViewController:的方法,該方法可以實(shí)現(xiàn)視圖切換,從當(dāng)前視圖跳轉(zhuǎn)到下一個(gè)視圖,通過此方法彈出的視圖我們都稱為模態(tài)視圖,模態(tài)視圖是手機(jī)上非常常見。此方法如下:

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

 模態(tài)視圖出現(xiàn)的場景一般是臨時(shí)彈出的窗口,譬如:登陸窗口。

 模態(tài)視圖彈出時(shí)通過modalTransitionStyle屬性設(shè)置不同的動(dòng)畫效果 。

 調(diào)用dismissModalViewControllerAnimated: 方法關(guān)閉窗口。

示例代碼和上述大致一樣,只是模態(tài)視圖彈出時(shí)通過modalTransitionStyle屬性設(shè)置不同的動(dòng)畫效果。將上述調(diào)用的方法稍作修改就可以了。

ViewController.m中

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

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

 firstVC.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;//設(shè)置視圖彈出時(shí)的動(dòng)畫效果

 [self presentModalViewController:firstVC animated:YES];

 }

然后在FirstViewController.m中調(diào)用

 [self dismissModelViewControllerAnimated: completion:^{   }];

 

3、以上兩種情況都是實(shí)現(xiàn)了試圖控制器之間的直接切換,中間沒有什么其他東西。下面我們說如果存在導(dǎo)航欄控制器(UINavigationController)的情況下如何實(shí)現(xiàn)視圖切換。

  可以在story.board里拽一個(gè)UINavigationController,把它的根視圖設(shè)置成ViewController,將story.board里is initial View Controller勾選√,讓程序的入口從導(dǎo)航欄控制器進(jìn)入。

  

  其他的和1里一樣。只是調(diào)用的方法有所改變,有導(dǎo)航欄控制器的情況下,調(diào)用的方法是:

  

ViewController.m中

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

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

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

}

這樣就行了,即使在FirstViewController.m中不寫方法,程序運(yùn)行也會(huì)自帶有一個(gè)按鈕返回ViewController。如圖:

點(diǎn)擊Back就自動(dòng)返回到上一級了。

但是也可以寫一個(gè)返回方法,系統(tǒng)是這個(gè)方法,寫不寫的區(qū)別在下面補(bǔ)充里面,個(gè)人覺得還是挺重要的關(guān)于這一點(diǎn)。

[self.navigationController pop...];建議自己嘗試一下。所以這里所用的方法總結(jié)下就是一個(gè)push,一個(gè)pop。

 

補(bǔ)充:

  首先說一下UINavigationController有一個(gè)屬性就是viewControllers,它是一個(gè)數(shù)組,存儲(chǔ)導(dǎo)航欄控制器的所有視圖控制器,也就是一個(gè)navigationController所有的viewController都在viewControllers里面。

  在沒有push到FirstViewController里面的時(shí)候,F(xiàn)irstViewController并不是navigationController的子控制器,當(dāng)push到FirstViewController后,navigationController就新添加了一個(gè)子控制器FirstViewController。viewControllers里也就有了FirstViewController。如果不用pop方法pop回去的話,F(xiàn)irstViewController的navigationController就存在了,但使用了pop方法pop回去的話就又釋放掉了,navigationControllerd的viewControllers也就沒有FirstViewController了。

   注意:push和pop方法都是navigationController的方法,調(diào)用時(shí)候,一般用[self.navigationController ...];

  

  這就解釋了為什么一個(gè)導(dǎo)航欄控制器只有一個(gè)根控制器,其他的控制器是怎么添加上,怎么去除的了。

  最后,為什么沒用到SenconedViewController呢?留著自己再做做實(shí)驗(yàn)吧。

 

初學(xué)iOS,如果有錯(cuò),還望不吝賜教。


發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 成人午夜免费国产 | 亚洲精品aⅴ中文字幕乱码 欧美囗交 | 天天草夜夜爽 | 亚洲欧美国产高清 | 性欧美xxxx极品摘花 | 国产成人在线免费观看视频 | 亚洲电影免费观看国语版 | www国产成人免费观看视频,深夜成人网 | 欧美日韩免费观看视频 | 久久精品99久久久久久2456 | 毛片观看网址 | 日韩激情一区二区三区 | 亚洲欧美在线看 | 色淫视频 | 羞羞电影在线观看 | 毛片在线视频观看 | 狠狠操夜夜爱 | 国产亚洲精品综合一区91555 | 国产精品久久久久久久久久久久久久久 | 5xsq在线视频 | 99欧美精品 | 一级黄色毛片a | 欧美a欧美 | 毛片视频网站 | 欧美精品一区二区久久久 | 欧美日韩免费一区 | av色哟哟 | 羞羞电影在线观看 | 美国av在线免费观看 | 欧美性生活区 | 久久久久久久久国产精品 | 国产美女视频一区二区三区 | 手机视频在线播放 | 哪里可以看免费的av | 一级做人爱c黑人影片 | 免费看一级毛片欧美 | 久久国产精品二国产精品 | 欧美一级毛片欧美一级成人毛片 | 欧美一级特黄aaaaaaa什 | 狠狠干夜夜草 | 精品国产一区二区三区在线观看 |