iOS開發捷徑學習(三)

weixin_33860722發表於2018-01-02
Storyboard的segue

Storyboard中的segue功能強大,是頁面跳轉與互動的利器。現在就瞭解下吧。

初始化

- (instancetype)initWithIdentifier:(nullable NSString *)identifier source:(UIViewContr![QQ20180102-110901@2x.png](http://upload-images.jianshu.io/upload_images/8956555-8984f1fec64aaf57.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
oller *)source destination:(UIViewController *)destination

segue的三個引數:

identifier:唯一標識,用於標識自己

sourceViewController:來源控制器,發起跳轉的控制器

destinationViewController:目標控制器,跳轉到的控制器

瞭解完初始化,我們就再瞭解下常見Segue型別吧

Relationship Segue:

包括Navigation Controller 和 Tab Bar Controller兩種,主要用於構建導航模式和tab bar模式。

8956555-fc566ca4c66bad54.png
RelationshipSegue@2x.png

Manual Segue選項:

8956555-20492e4d5c0db362.png
ManualSegue@2x.png

1.Show

在segue跳轉時呼叫源控制器中的show(_:sender:)方法,該方法會呼叫targetViewController(forAction:sender:)方法,根據方法返回的VC不同,選擇不同的跳轉方式,如果返回時navigationController,那麼show會以Push的形式跳轉,返回為nil,就會以Present的形式跳轉。

2.Show Detail

會呼叫源控制中的showDetailViewController: sender:方法。一般適用於嵌入在UISplitViewController物件內的檢視控制器,分割控制器用以替換詳細控制器(DetailViewController)。
其他情況預設使用present的方式進行跳轉。

3.Present Modally

會呼叫源控制中的presentViewController: animated: completion:
有多種不同呈現方式,可根據需要設定。在iPhone中,一般以動畫的形式自下向上覆蓋整個螢幕,使用者無法與上一個檢視互動,除非關閉當前檢視;在iPad中,常見呈現為一箇中心框,中心框以動畫形式自下向上彈出,同時使底層檢視控制器變暗

4.Present as Popover

在iPad中,目標檢視以浮動窗樣式呈現,點選目標檢視以外區域,目標檢視消失;在iPhone中,預設目標檢視以模態覆蓋整個螢幕。

4. Custom

自定義跳轉方式,重寫UIStoryboardSegu子類來實現,實現perform,實現自定義跳轉過程。

Embed Segue:
一般控制器內使用此功能,內嵌UIPageViewController實現多頁面切換與管理。就是一個ViewController的View嵌入到另外一個ViewController中,也稱作childViewController。這樣的設計是一塊區域有一個單獨的ViewController,從MVC的設計模式來看,這是一個解耦合的過程,由嵌入式的ViewController來負負責一塊區域的Modol和View的協調,如果由一個ViewController來實現會造成單個ViewController過於臃腫。

Unwind Segue:

Unwind Segue,是為了應付任意跳轉的情況,即從任意一個View Controller轉場到特定的View Controller。在Nib的時代,這種工作往往通過delegate來完成。但是有了Unwind Segue以後,我們只要在需要跳轉到的這個特定的View Controller類中實現一個簽名為- (IBAction)unwindMethod:(UIStoryboardSegue *)segue這樣的方法即可(其中unwindMethod可以替換為任何你喜歡的名稱,但注意,當存在多個這樣的方法時,名稱不要相同,以免發生衝突,造成不可預料的後果)。這樣,我們就可以在任意的View Controller(除了含有這個方法本身的View Controller)通過連線Segue來實現任意View Controller跳轉到當前View Controller。不用再多寫一行程式碼,這些都可以通過Interface Builder搞定,非常方便。

相關文章