国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > iOS > 正文

iOS開發中ViewController的頁面跳轉和彈出模態

2019-10-21 18:57:12
字體:
來源:轉載
供稿:網友
這篇文章主要介紹了iOS開發中ViewController的頁面跳轉和彈出模態,ViewController是MVC開發模式中一個重要的類,需要的朋友可以參考下
 

ViewController 頁面跳轉
從一個Controller跳轉到另一個Controller時,一般有以下2種: 
1、利用UINavigationController,調用pushViewController,進行跳轉;這種采用壓棧和出棧的方式,進行Controller的管理。調用popViewControllerAnimated方法可以返回。 

復制代碼代碼如下:

    PickImageViewController *ickImageViewController = [[PickImageViewController alloc] init]; 
    [self.navigationController pushViewController: ickImageViewController animated:true]; 
    [ickImageViewController release];

 


2、利用UIViewController自身的presentModalViewController,進行跳轉;調用dismissModalViewControllerAnimated方法可以返回。 

復制代碼代碼如下:

    PickImageViewController *ickImageViewController = [[PickImageViewController alloc] init]; 
    [self presentModalViewController:ickImageViewController animated:YES]; 
//返回 
[self dismissModalViewControllerAnimated:YES];

 


Present ViewController Modally 
 
一、主要用途
 
  彈出模態ViewController是IOS變成中很有用的一個技術,UIKit提供的一些專門用于模態顯示的ViewController,如UIImagePickerController等。彈出模態ViewController主要使用于一下這幾種情形:
 
  1、收集用戶輸入信息
 
  2、臨時呈現一些內容
 
  3、臨時改變工作模式
 
  4、相應設備方向變化(用于針對不同方向分別是想兩個ViewController的情況)
 
  5、顯示一個新的view層級
 
  這幾種情形都會暫時中斷程序正常的執行流程,主要作用是收集或者顯示一些信息。
 
二、幾個概念和常用設置
 
1、presenting view controller Vs presented view controller
 
  當我們在view controller A中模態顯示view controller B的時候,A就充當presenting view controller(彈出VC),而B就是presented view controller(被彈出VC)。官方文檔建議這兩者之間通過delegate實現交互,如果使用過UIImagePickerController從系統相冊選取照片或者拍照,我們可以發現imagePickerController和彈出它的VC之間就是通過UIImagePickerControllerDelegate實現交互的。因此我們在實際應用用,最好也遵守這個原則,在被彈出的VC中定義delegate,然后在彈出VC中實現該代理,這樣就可以比較方便的實現兩者之間的交互。
 
2、Modal Presentation Styles(彈出風格)
 
  通過設置presenting VC的modalPresentationStyle屬性,我們可以設置彈出View Controller時的風格,有以下四種風格,其定義如下:

復制代碼代碼如下:

typedef enum {
    UIModalPresentationFullScreen = 0,
    UIModalPresentationPageSheet,
    UIModalPresentationFormSheet,
    UIModalPresentationCurrentContext,
} UIModalPresentationStyle;

  UIModalPresentationFullScreen代表彈出VC時,presented VC充滿全屏,如果彈出VC的wantsFullScreenLayout設置為YES的,則會填充到狀態欄下邊,否則不會填充到狀態欄之下。
 
  UIModalPresentationPageSheet代表彈出是彈出VC時,presented VC的高度和當前屏幕高度相同,寬度和豎屏模式下屏幕寬度相同,剩余未覆蓋區域將會變暗并阻止用戶點擊,這種彈出模式下,豎屏時跟UIModalPresentationFullScreen的效果一樣,橫屏時候兩邊則會留下變暗的區域。
 
  UIModalPresentationFormSheet這種模式下,presented VC的高度和寬度均會小于屏幕尺寸,presented VC居中顯示,四周留下變暗區域。
 
  UIModalPresentationCurrentContext這種模式下,presented VC的彈出方式和presenting VC的父VC的方式相同。
 
  這四種方式在iPad上面統統有效,但在iPhone和iPod touch上面系統始終已UIModalPresentationFullScreen模式顯示presented VC。
 
3、Modal Transition Style(彈出時的動畫風格)
 
  通過設置設置presented VC的modalTransitionStyle屬性,我們可以設置彈出presented VC時場景切換動畫的風格,其定義如下:
復制代碼代碼如下:

typedef enum {
        UIModalTransitionStyleCoverVertical = 0,
        UIModalTransitionStyleFlipHorizontal,
        UIModalTransitionStyleCrossDissolve,
        UIModalTransitionStylePartialCurl,
} UIModalTransitionStyle;

  我們可以看到有從底部滑入,水平翻轉進入,交叉溶解以及翻頁這四種風格可選。這四種風格在不受設備的限制,即不管是iPhone還是iPad都會根據我們指定的風格顯示轉場效果。
 
4、Dismiss Modal ViewController(消失彈出的VC)
 
  消失presented VC,我們可以通過調用以下兩個函數中的任何一個來完成
復制代碼代碼如下:

dismissModalViewControllerAnimated:                 // 將要廢棄,不贊成繼續使用
dismissViewControllerAnimated:completion:

  誰來調用這消失presented VC的這個方法:正確的做法是“誰污染誰治理”,即presenting VC調用上面的方法來取消presented VC的顯示。這樣做有一個好處,如果一個VC真不用戶做的不同選擇可能彈出不同的view controller,當不再需要顯示被彈出的view controller的時候,直接調用[self dismissModalViewControllerAnimated]即可使之消失,而不用去關心其具體顯示的哪一類view controller。當然系統在這里做了優化,當我們在presented VC里面調用上面的方法的時候,系統會自動的將這個消息傳遞到相應的presenting VC中,這樣就可以實現不管誰彈出了自己,當不再需要的時候直接將自己消失掉的功能。在應用中具體要采用那種要看具體情況,如果presented VC需要和presenting VC有數據傳遞的話,建議在presenting VC實現的代理函數中dismiss彈出的view controller。


注:相關教程知識閱讀請移步到IOS開發頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 弋阳县| 本溪| 常宁市| 常州市| 高清| 桓仁| 浦东新区| 太康县| 尖扎县| 怀宁县| 渑池县| 康保县| 越西县| 岳池县| 宝坻区| 修武县| 关岭| 大田县| 晋城| 广德县| 上栗县| 平顺县| 左贡县| 弥渡县| 盐源县| 泰顺县| 车致| 寿光市| 舒城县| 新源县| 汉阴县| 鹤壁市| 丰镇市| 彝良县| 高邮市| 嵊州市| 循化| 兴山县| 托克逊县| 苍南县| 昆山市|