<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                [TOC=5] >原文鏈接 :[Using Segues](https://developer.apple.com/library/content/featuredarticles/ViewControllerPGforiPhoneOS/UsingSegues.html#//apple_ref/doc/uid/TP40007457-CH15-SW1) 使用 Segue 來定義應用程序界面的流程。 Segue 定義了應用程序故事板文件中兩個視圖控制器之間的轉換。 Segue 的起始點是啟動 Segue 的按鈕,列表或手勢。 Segue 的結束點是想要顯示的視圖控制器。 Segue 總是呈現一個新的視圖控制器,但是也可以使用 unwind segue 來關閉視圖控制器。 ###### 圖 9-1 兩個視圖控制器之間的 Segue ![](https://developer.apple.com/library/content/featuredarticles/ViewControllerPGforiPhoneOS/Art/segue_defined_2x.png) 不需要以編程的方式觸發 Segue 。 在運行時, UIKit 加載與視圖控制器相關聯的 segues ,并將它們連接到相應的元素。 當用戶與元素進行交互時, UIKit 會加載相應的視圖控制器,通知您的應用程序即將發生的事件,并執行轉換。 可以使用 UIKit 發送的通知將數據傳遞到新的視圖控制器,或者或者阻止 segue 的執行。 ### 在視圖控制器之間創建一個 Segue 要在同一個故事板文件中的視圖控制器之間創建一個 Segue,請按住 Control 鍵單擊第一個視圖控制器中的相應元素,然后拖動到目標視圖控制器。 Segue 的起始點必須是具有已定義操作的視圖或對象,例如 control,bar button item 或 gesture recognizer 。 也可以從基于單元格的視圖(如 UITableView 和 UICollectionView)創建 Segue。 圖 9-2 顯示了創建一個 Segue,當一個列表被點擊時顯示一個新的視圖控制器。 ###### 圖 9-2 創建 Segue ![](https://developer.apple.com/library/content/featuredarticles/ViewControllerPGforiPhoneOS/Art/segue_creating_2x.png) > 注意 一些元素支持多個 Segue 。例如,一個 UITableViewCell 擁有多個可以點擊的控件允許您配置不同的 Segue 。 當釋放鼠標按鈕時,Interface Builder 會提示選擇要在兩個視圖控制器之間創建的關系類型,如圖 9-3 所示。 選擇與您想要的轉換相對應的 Segue 。 ###### 圖9-3選擇要創建的 Segue 的類型 ![](https://developer.apple.com/library/content/featuredarticles/ViewControllerPGforiPhoneOS/Art/segue_creating_relationships_2x.png) 在選擇 Segue 的關系類型時,盡量選擇一個自適應的 Segue 。自適應的 Segue 根據當前環境自動調整它們的行為。例如,`Show` segue 的行為基于呈現中的視圖控制器。iOS 7 不支持自適應的 Segue,但它也提供了非自適應的 Segue 。表 9-1 列出了自適應的 Segue 以及它們在應用程序中的行為。 ###### 表 9-1 自適應 Segue 類型 | Segue 類型 | 行為 | | --- | --- | | Show (Push) | Segue 使用源視圖控制器的 `showViewController:sender:` 方法顯示新的內容。 對于大多數視圖控制器,這個 Segue 在源視圖控制器上以彈出方式呈現新的內容。 一些視圖控制器專門覆蓋重寫該方法并使用它來實現不同的行為。 例如,導航控制器將新的視圖控制器推到其導航堆棧上。UIKit 使用 `targetViewControllerForAction:sender:` 方法來定位源視圖控制器。 | | Show Detail (Replace) | Segue 使用源視圖控制器的 `showDetailViewController:sender:` 方法顯示新的內容。 這個 Segue 僅與嵌入在 UISplitViewController 對象內的視圖控制器有關。 通過這個 Segue,UISplitViewController 用新的內容替換它的第二個子視圖控制器(detail controller)。 大多數其他視圖控制器以彈出方式呈現新內容。UIKit 使用 `targetViewControllerForAction:sender:` 方法來定位源視圖控制器。 | | Present Modally | Segue 使用指定的顯示和轉換樣式顯示視圖控制器。定義顯示上下文的視圖控制器處理實際的顯示效果。 | | Present as Popover | 在水平的常規環境中,視圖控制器出現在彈出窗口中。 在水平緊湊的環境中,視圖控制器使用全屏模式顯示。 | 創建一個 Segue 后,選擇 Segue 對象并使用屬性檢查器為其指定一個標識符。 在 Segue 期間,可以使用標識符來確定哪個 Segue 被觸發,如果您的視圖控制器支持多個 Segue,這是特別有用的。 標識符包含在執行 Segue 時交付給視圖控制器的 UIStoryboardSegue 對象中。 ### 在運行時修改 Segue 的行為 圖 9-4 顯示了當一個 Segue 被觸發時會發生什么。 大多數工作發生在呈現視圖控制器中,該視圖控制器管理新視圖控制器的轉換。 新視圖控制器的配置基本上與自己創建視圖控制器并呈現它的過程基本相同。 由于從故事板配置了 segues,因此參與 Segue 的兩個視圖控制器必須位于同一個故事板中。 ###### 圖 9-4 使用 Segue 顯示視圖控制器 ![](https://developer.apple.com/library/content/featuredarticles/ViewControllerPGforiPhoneOS/Art/VCPG_displaying-view-controller-using-segue_9-4_2x.png) 在一個 Segue 中,UIKit 調用當前視圖控制器的方法給你機會來影響 Segue 的結果。 * `shouldPerformSegueWithIdentifier:sender:` 方法可以讓你有機會阻止 segue 發生。從這個方法中返回 NO 會導致 segue 的失敗,但是不會阻止其他操作的發生。例如,UITableViewCell 的點擊仍然會調用 UITableView 相關的委托方法。 * 源視圖控制器的 `prepareForSegue:sender:` 方法允許將數據從源視圖控制器傳遞到目標視圖控制器。 傳遞給方法的 UIStoryboardSegue 對象包含對目標視圖控制器的引用以及其他與 Segue 相關的信息。 ### 創造一個 Unwind Segue Unwind Segue 用來關閉已經展示的視圖控制器。 通過將一個按鈕或其他適當的對象鏈接到當前視圖控制器的 Exit 對象,可以在 Interface Builder 中創建 Unwind Segue。 當用戶點擊按鈕或與適當的對象進行交互時,UIKit 在視圖控制器層次結構中搜索能夠處理 Unwind Segue 的對象。然后關閉當前的視圖控制器和中間視圖控制器來顯示 Unwind Segue 的目標視圖控制器。 要創建一個 Unwind Segue : 1. 選擇在 Unwind Segue 結束時出現在屏幕上的視圖控制器。 2. 在您選擇的視圖控制器上定義一個 unwind 操作方法 ~~~ @IBAction func myUnwindAction(unwindSegue: UIStoryboardSegue) - (IBAction)myUnwindAction:(UIStoryboardSegue*)unwindSegue ~~~ 3. 導航到啟動 unwind 操作的視圖控制器。 4. 在你選擇的視圖控制器上定義一個 unwind 方法。按住 Control 鍵點擊應該啟動unwind segue 的按鈕(或其他對象)。 這個元素應該在你想要關閉的視圖控制器中。 5. 拖動到視圖控制器場景頂部的 Exit 對象![](https://developer.apple.com/library/content/featuredarticles/ViewControllerPGforiPhoneOS/Art/segue_unwind_linking_2x.png) 6. 從關系面板中選擇 unwind 方法。 在 Interface Builder 中創建相應的 Unwind Segue 之前,必須在視圖控制器中定義一個 unwind 操作方法。該方法的存在是必需的,它告訴 Interface Builder,Unwind Segue 有一個有效的目標。 使用 unwind 操作方法的實現來執行應用程序的特定任務。不需要關閉 segue 中涉及到的任何視圖控制器,UIKit 為你做這個。相反,使用 segue 對象獲取被關閉的視圖控制器,以便可以從它檢索數據。還可以在 unwind segue 結束之前使用 unwind 操作來更新當前的視圖控制器。 ### 以編程方式啟動 Segue Segue 通常是由在故事板文件中創建的連接而觸發的。然而,有時可能無法在故事板中創建 Segue,因為目標視圖控制器可能還不知道。例如,游戲應用程序可能會根據游戲的結果轉換到不同的場景。 在這些情況下,可以使用當前視圖控制器的 `performSegueWithIdentifier:sender:` 方法從代碼中以編程方式觸發 Segue 。 清單 9-1 演示了從縱向到橫向旋轉時呈現特定視圖控制器的 Segue 。 因為這種情況下的通知對象沒有提供執行 Segue 命令的有用信息,視圖控制器將自己指定為 Segue 的觸發者。 ###### 清單 9-1 以編程方式觸發一個 segue ~~~ - (void)orientationChanged:(NSNotification *)notification { UIDeviceOrientation deviceOrientation = [UIDevice currentDevice].orientation; if (UIDeviceOrientationIsLandscape(deviceOrientation) && !isShowingLandscapeView) { [self performSegueWithIdentifier:@"DisplayAlternateView" sender:self]; isShowingLandscapeView = YES; } // 剩下的例子被省略了。. } ~~~ ### 創建一個自定義 Segue Interface Builder 提供了從一個視圖控制器轉換到另一個視圖控制器的所有標準方法 (從彈出一個視圖控制器到在彈出窗口中顯示一個控制器) 。 但是,如果其中沒有一個 Segue 是你想要的,你可以創建一個自定義 Segue 。 #### 一個 Segue 的生命周期 要了解自定義 Segue 如何工作,您需要了解 Segue 對象的生命周期。 Segue 對象是 UIStoryboardSegue 或它的一個子類的實例。 你的 app 永遠不需要直接創建 segue 對象。 當一個 segue 被觸發時,UIKit創建它們。 以下是發生的事情: 1. 要呈現的視圖控制器被創建并初始化。 2. Segue 對象被創建,它的 `initWithIdentifier:source:destination:` 方法被調用。 標識符是在 Interface Builder 中為 segue 提供的唯一字符串,另外兩個參數表示轉換中的兩個控制器對象。 3. 顯示中的視圖控制器的 `prepareForSegue:sender:` 方法被調用。 請參閱 [Modifying a Segue’s Behavior at Runtime](https://developer.apple.com/library/content/featuredarticles/ViewControllerPGforiPhoneOS/UsingSegues.html#//apple_ref/doc/uid/TP40007457-CH15-SW11)。 4. Segue 對象的 [perform](https://developer.apple.com/documentation/uikit/uistoryboardsegue/1621912-perform) 方法被調用。 此方法執行轉換以將新的視圖控制器顯示在屏幕上。 5. 對 Segue 的引用被釋放。 #### 實現一個自定義 Segue 為了實現一個自定義的 Segue,子類 UIStoryboardSegue 并實現以下方法: * 覆蓋 `initWithIdentifier:source:destination:` 方法并使用它來初始化自定義的 segue 對象。 總是先調用 `super` 方法。 * 實現 `perform` 方法并使用它來配置過渡動畫。 > 注意 如果子定義實現添加了配置 Segue 的屬性,則無法在 Interface Builder 中配置這些屬性。 相反,在觸發 Segue 的源視圖控制器的 `prepareForSegue:sender:` 方法中配置自定義的 Segue 的附加屬性。 清單 9-2 顯示了一個非常簡單的自定義 Segue 。這個例子簡單地展示了如何彈出目標視圖控制器,沒有任何動畫,但是您可以根據需要擴展這個想法。 ###### 清單 9-2 一個自定義的 Segue ~~~ - (void)perform { // 在這里添加自己的動畫代碼。 [[self sourceViewController] presentViewController:[self destinationViewController] animated:NO completion:nil]; } ~~~
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看