<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>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                [TOC=5] * * * * * >原文鏈接 :[Defining Your Subclass](https://developer.apple.com/library/content/featuredarticles/ViewControllerPGforiPhoneOS/DefiningYourSubclass.html#//apple_ref/doc/uid/TP40007457-CH7-SW1) 你使用 UIViewController 的自定義子類來呈現你的應用程序的內容。大多數自定義視圖控制器是內容視圖控制器,也就是說,它們擁有所有視圖,并負責管理這些視圖中的數據。相比之下,容器視圖控制器并不擁有它的所有視圖;它的一些視圖由其他視圖控制器管理。定義內容和容器視圖控制器的大多數步驟是相同的,并將在后面的小節中討論。 對于內容視圖控制器,最常見的父類如下所示: * 當你的視圖控制器的主視圖是一個表時,使用 UITableViewController。 * 當你的視圖控制器的主視圖是一個集合視圖時,使用 UICollectionViewController。 * 對所有其他視圖控制器使用 UIViewController。 對于容器視圖控制器,父類取決于您是在修改現有的容器類還是創建自己的類。對于現有的容器,選擇您想要修改的任何視圖控制器類。對于新的容器視圖控制器,建議你子類化 UIViewController 。有關創建容器視圖控制器的其他信息,請參見 [Implementing a Container View Controller](https://developer.apple.com/library/content/featuredarticles/ViewControllerPGforiPhoneOS/ImplementingaContainerViewController.html#//apple_ref/doc/uid/TP40007457-CH11-SW1)。 ### 定義UI 用Xcode中的故事板文件來定義視圖控制器的UI。雖然您也可以通過編程方式創建UI,但是故事板是一種很好的可視化視圖控制器內容的方法,并且可以根據不同的環境定制您的視圖層次結構(根據需要)。可視化地構建UI可以讓您快速做出更改,并讓您看到結果,而無需編譯和運行您的應用程序。 圖 4-1 顯示了一個故事板的例子。每個矩形區域表示一個視圖控制器及其相關視圖。視圖控制器之間的箭頭是視圖控制器關系和segue。關系將一個容器視圖控制器連接到它的子視圖控制器。segue讓你在界面的視圖控制器之間導航。 ###### 圖 4-1 一個故事板包含一組視圖控制器和視圖 ![](https://developer.apple.com/library/content/featuredarticles/ViewControllerPGforiPhoneOS/Art/storyboard_bird_sightings_2x.png) 每個新項目都有一個主故事板,它通常包含一個或多個視圖控制器。您可以將新的視圖控制器添加到您的故事板中,將它們從庫拖到您的畫布上。新的視圖控制器最初沒有相關的類,因此您必須使用標識檢查器分配一個類。 使用故事板編輯器來完成以下操作: * 添加、排列和配置視圖控制器的視圖。 * 連接 outlets 和 actions,參考 [Handling User Interactions](https://developer.apple.com/library/content/featuredarticles/ViewControllerPGforiPhoneOS/DefiningYourSubclass.html#//apple_ref/doc/uid/TP40007457-CH7-SW11) 。 * 在視圖控制器之間創建關系和 segue ,參考 [Using Segues](https://developer.apple.com/library/content/featuredarticles/ViewControllerPGforiPhoneOS/UsingSegues.html#//apple_ref/doc/uid/TP40007457-CH15-SW1) 。 * 為不同大小的界面定制您的布局和視圖,參考 [Building an Adaptive Interface](https://developer.apple.com/library/content/featuredarticles/ViewControllerPGforiPhoneOS/BuildinganAdaptiveInterface.html#//apple_ref/doc/uid/TP40007457-CH32-SW1)。 * 添加手勢識別器來處理用戶與視圖的交互;參考 Event Handling Guide for iOS(找不到此文鏈接) 。 如果你是使用故事板來構建界面的新手,那么你可以在開始開發iOS應用程序的時候,找到創建基于故事板的界面的一步一步的指導,參考 [Start Developing iOS Apps (Swift)](https://developer.apple.com/library/content/referencelibrary/GettingStarted/DevelopiOSAppsSwift/)。 ### 處理用戶交互 應用程序的響應對象處理傳入事件并采取適當的動作。盡管視圖控制器是響應對象,但它們很少直接處理觸摸事件。相反,視圖控制器通常以以下方式處理事件。 * 視圖控制器定義了處理更高級別事件的操作方法。 用來響應: * 指定的 action 。 控件和一些視圖調用一個 action 方法來響應特定的交互。 * 手勢識別器。 手勢識別器調用方法來報響應手勢的當前狀態。 使用視圖控制器處理狀態更改或響應已完成的手勢。 * 視圖控制器觀察由系統或其他對象發送的通知。通知報告更改,并且是視圖控制器更新其狀態的一種方式。 * 視圖控制器充當另一個對象的數據源或委托。視圖控制器通常用于管理 UITableView 和 UICollectionView 的數據。您還可以將它們用作其他對象的委托,例如 CLLocationManager ,該對象將更新的位置值發送給它的委托。 對事件的響應常常涉及到更新視圖的內容,更新視圖的內容需要擁有這些視圖的引用。視圖控制器是保存需要修改的視圖定義的 outlet 的好地方。使用清單 4-1 所示的語法將您的outlet聲明為屬性。清單中的自定義類定義了兩個 outlet (由 IBOutlet 關鍵字指定)和一個方法(指定 IBAction 返回類型)。outlet 擁有存儲在故事板中一個按鈕和一個文本字段的引用,而方法則響應按鈕中的點擊。 清單 4-1 在視圖控制器類中定義 outlet 和方法 ~~~ //Objective-C @interface MyViewController : UIViewController @property (weak, nonatomic) IBOutlet UIButton *myButton; @property (weak, nonatomic) IBOutlet UITextField *myTextField; - (IBAction)myButtonAction:(id)sender; @end //Swift class MyViewController: UIViewController { @IBOutlet weak var myButton : UIButton! @IBOutlet weak var myTextField : UITextField! @IBAction func myButtonAction(sender: id) } ~~~ 在故事板中,記得將視圖控制器的 outlet 和 action 連接到相應的視圖。在故事板文件中連接 outlet 和 action 可以確保在加載視圖時配置它們。有關如何在 Interface Builder 中創建 outlet 和 action 連接的信息,請參閱 Interface Builder Connections Help 。有關如何處理應用程序中的事件的信息,請參見 Event Handling Guide for iOS 。 ### 在運行時顯示視圖 故事板使裝載和顯示視圖控制器視圖的過程非常簡單。當需要時,UIKit自動從你的故事板文件中載入視圖。作為加載過程的一部分,UIKit執行以下一系列任務: 1. 使用您的故事板文件中的信息實例化視圖。 2. 連接所有的 outlet 和 action 。 3. 將根視圖分配給視圖控制器的視圖屬性。 4. 調用視圖控制器的 awakeFromNib 方法。 5. 當這個方法被調用時,視圖控制器的特征集合是空的,視圖可能不在它們的最終位置。 6. 調用視圖控制器的 viewDidLoad 方法。 7. 使用該方法添加或刪除視圖,修改布局約束,并為視圖加載數據。 在屏幕上顯示視圖控制器的視圖之前,UIKit為您提供了一些額外的機會在屏幕前后準備這些視圖。 具體來說,UIKit執行以下任務序列: 1. 調用視圖控制器的 viewWillAppear: 方法讓它知道它的視圖將會出現在屏幕上。 2. 更新視圖的布局。 3. 屏幕上顯示的視圖。 4. 視圖在屏幕上時調用 viewDidAppear: 方法。 添加,刪除或修改視圖的大小或位置時,請記住添加和刪除適用于這些視圖的任何約束。在下一個更新周期中,布局引擎使用當前的布局約束計算視圖的大小和位置,并將這些更改應用到視圖層次結構中。 有關如何在不使用故事板的情況下創建視圖的信息,請參閱 [UIViewController Class Reference](https://developer.apple.com/documentation/uikit/uiviewcontroller) 。 ### 管理視圖布局 當視圖的大小和位置發生變化時,UIKit將更新視圖層次結構的布局信息。對于使用自動布局配置的視圖,UIKit會使用自動布局引擎,并根據當前的約束來更新布局。UIKit還允許其他關注布局變動的對象,比如使用中的 presentation controller,知道布局的變化,這樣它們就可以做出相應的響應。 在布局過程中,UIKit會在幾個點通知你,這樣你就可以執行其他的與布局相關的任務。使用這些通知來修改布局約束,或者在布局約束應用之后對布局進行最后的調整。在布局過程中,UIKit為每個受影響的視圖控制器做如下操作: 1. 根據需要更新視圖控制器及其視圖的特征集合,參考 [When Do Trait and Size Changes Happen?](https://developer.apple.com/library/content/featuredarticles/ViewControllerPGforiPhoneOS/TheAdaptiveModel.html#//apple_ref/doc/uid/TP40007457-CH19-SW6) 2. 調用視圖控制器的 `- (void)viewWillLayoutSubviews;` 方法。 3. 調用當前UIPresentationController對象的 `- (void)containerViewWillLayoutSubviews;` 方法。 4. 調用視圖控制器根視圖的`- (void)layoutSubviews;` 方法。該方法的默認實現使用可用的約束來計算新的布局信息。然后該方法遍歷視圖層次結構,并為每個子視圖調用`- (void)layoutSubviews;` 方法。 5. 將計算的布局信息應用于視圖。 6. 調用視圖控制器的 `- (void)viewDidLayoutSubviews;` 方法。 7. 調用當前 UIPresentationController 對象的 `- (void)containerViewDidLayoutSubviews;` 方法。 視圖控制器可以使用 `- (void)viewWillLayoutSubviews; 和 - (void)viewDidLayoutSubviews` 方法來執行可能影響布局過程的額外更新。在布局之前,您可以添加或刪除視圖,更新視圖的大小或位置,更新約束,或更新其他與視圖相關的屬性。在布局之后,您可以重新加載表數據,更新其他視圖的內容,或者對視圖的大小和位置進行最后的調整。 下面是一些有效管理布局的技巧: * **使用自動布局**。使用自動布局創建的約束是一種靈活而簡單的方法,可以將內容放置在不同的屏幕大小上。 * **利用 topLayoutGuide 和 bottomLayoutGuide** 。這樣可以保證你的展示內容可見。topLayoutGuide 位置會根據狀態欄和導航欄高度調整,bottomLayoutGuide 位置根據底部的工具欄或者菜單欄調整。 * **記得在添加或刪除視圖時更新約束**。如果您動態添加或刪除視圖,請記住更新相應的約束。 * **在視圖控制器的視圖做動畫時,暫時移除約束**。當使用 UIKit Core Animation 制作動畫時,在動畫的持續時間內移除你的約束,并在動畫結束時將它們添加回來。如果您的視圖的位置或大小在動畫中發生了更改,請記住更新您的約束。 關于展示控制器的信息和它們在視圖控制器體系結構中所扮演的角色,請參閱 [The Presentation and Transition Process](https://developer.apple.com/library/content/featuredarticles/ViewControllerPGforiPhoneOS/PresentingaViewController.html#//apple_ref/doc/uid/TP40007457-CH14-SW7) 。 ### 有效地管理內存 盡管內存分配的大部分方面都由您來決定,但是表 4-1 列出了您最有可能分配或釋放內存的 UIViewController 的方法。 大多數釋放伴隨著刪除對象的強引用。 要刪除對象的強引用,請將指向該對象的屬性和變量設置為 nil 。 | 任務 | 方法 | 討論 | | --- | --- | --- | | 創建視圖控制器所需的關鍵數據結構 | Initialization 初始化方法 | 您的自定義初始化方法(無論它是否被命名為init或其他形式)總是負責將您的視圖控制器對象放入一個已知的良好狀態。使用這些方法來分配所需的數據結構以確保正確的操作。 | | 分配或加載要在您的視圖中顯示的數據 | `- (void)viewDidLoad;` | 使用 viewDidLoad 方法來加載您想要顯示的任何數據對象。當調用這個方法時,您的視圖對象將被確保存在并且處于一個已知的良好狀態。 | | 回應低內存通知 | `- (void)didReceiveMemoryWarning;` | 使用該方法來釋放與您的視圖控制器相關聯的所有非關鍵對象。釋放盡可能多的內存。 | | 釋放視圖控制器所需的關鍵數據結構。 | `- (void)dealloc;` | 重寫這個方法,只在最后時刻對您的視圖控制器類進行清理。系統會自動釋放存儲在實例變量和類屬性中的對象,因此您不需要顯式地釋放這些對象。 |
                  <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>

                              哎呀哎呀视频在线观看