簡體   English   中英

從一個UIViewController管理多個UIView

[英]Managing multiple UIViews from one UIViewController

我對視圖控制器感到困惑,並希望舉一個簡單的例子。 這是序言:

我有一個帶有匹配的.xib的UIViewController。 默認情況下,IB在“文檔”窗口中給我一個視圖。 我可以通過告訴UIWindow addSubview:controller.viewbringSubviewToFront:controller.view使其顯示

這是問題:

  1. 我應該在IB中的ViewController中添加另一個視圖嗎? 還是有更好的編程方式?

  2. 如何告訴ViewController在視圖之間切換?

  3. 從ViewController向下,實現此目標的代碼看起來如何?

我正在嘗試事情,但只是一團糟,所以我以為我會停下來問...

請注意,主視圖控制器中的每個按鈕,標簽,圖像等實際上都是其本身的視圖,但是我將您的問題解釋為您要管理多個全屏視圖或“屏幕”。 每個屏幕都應具有自己的視圖控制器來進行管理。 因此,為了正確理解術語,視圖控制器是一個對象,它管理單個全屏視圖(例如,如果嵌套在導航控制器或選項卡欄控制器中,則幾乎是全屏),並且視圖是由視圖控制器以及其中的所有子視圖(圖像,按鈕,標簽等)(它們都是UIView子類)。 視圖控制器在該屏幕上管理所有它們,如果您想要另一個屏幕/頁面,則應創建一個新的視圖控制器來對其進行管理。

根視圖控制器(您添加到窗口中的那個)可以是您在IB中設計的普通的普通視圖控制器,但是如果您使用導航控制器或標簽欄控制器並添加設計的視圖,則它可能會更有用。控制器-然后您可以根據需要推送其他視圖控制器。

另一種方法(如果您不想導航或標簽欄樣式)將是使用您喜歡的任何轉換直接在主窗口中轉換到其他視圖控制器(或僅替換舊的)。 我們暫時將其保留。

主視圖控制器的所有子視圖(您在IB中設計的子視圖)都將從nib文件中自動加載,但是您也可以根據需要以編程方式添加自己的視圖(通常會使用其中一個視圖,即筆尖程序化,但您可以根據需要進行混合和匹配)。 要以編程方式執行此操作,請在視圖控制器中重寫loadView ,然后調用[super loadView]; 然后做[self.view addSubView:myOtherView]; (首先創建myOtherView )。 請注意,第一次在視圖控制器上訪問.view ,實際上會調用loadView來創建視圖,因此在loadView內調用[super loadView];很重要[super loadView]; 在嘗試訪問self.view之前:D

要在視圖之間切換,使用導航或選項卡欄控制器將使其非常容易。 因此,將主視圖控制器放在(例如)導航控制器內部,然后將導航控制器放在窗口中,這樣就得到了window-> navigationController-> myController。 然后從視圖控制器中的操作方法(您可以在IB中連接操作方法),例如,當按下“關於”按鈕時,執行以下操作:

- (void)doAbout
{
    // Create the about view controller
    AboutViewController* aboutVC = [AboutViewController new];
    // Push the view controller onto the navigation stack
    [self.navigationController pushViewController:aboutVC animated:YES];
    [aboutVC release];
}

請注意,關於視圖控制器是在此處以編程方式創建的-如果您的關於視圖是在IB中設計的,則可以使用initWithNibName:bundle:來創建它。

這就是您管理多個屏幕的方式。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM