[英]Managing multiple UIViews from one UIViewController
我對視圖控制器感到困惑,並希望舉一個簡單的例子。 這是序言:
我有一個帶有匹配的.xib的UIViewController。 默認情況下,IB在“文檔”窗口中給我一個視圖。 我可以通過告訴UIWindow addSubview:controller.view
和bringSubviewToFront:controller.view
使其顯示
這是問題:
我應該在IB中的ViewController中添加另一個視圖嗎? 還是有更好的編程方式?
如何告訴ViewController在視圖之間切換?
從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.