簡體   English   中英

訪問UIWindow的rootViewController?

[英]Accessing a UIWindow's rootViewController?

這是ECSlidingViewController演示代碼的applicationDidFinishLaunching方法:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
  ECSlidingViewController *slidingViewController = (ECSlidingViewController *)self.window.rootViewController;
  UIStoryboard *storyboard;

  if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) {
    storyboard = [UIStoryboard storyboardWithName:@"iPhone" bundle:nil];
  } else if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
    storyboard = [UIStoryboard storyboardWithName:@"iPad" bundle:nil];
  }

  slidingViewController.topViewController = [storyboard instantiateViewControllerWithIdentifier:@"FirstTop"];

  return YES;
}

對我來說沒有意義的是第一行:

ECSlidingViewController *slidingViewController = (ECSlidingViewController*)self.window.rootViewController;

我只是不知道如何抓住窗口的根視圖控制器,並按照你喜歡的方式投射它? 這條線到底是做什么的,它是如何工作的?

在故事板中,您為根視圖控制器設置了一個場景(即在屬性中選中了rootViewController復選框,並且畫布上的初始箭頭指向此視圖控制器)。 該視圖控制器的類在屬性檢查器中設置。 在您的情況下,該類設置為ECSlidingViewController 這決定了storyboard將實例化的對象的類。

UIWindow有一個返回該對象的屬性rootViewController UIWindow上的屬性類型是UIViewController - 因此窗口知道它是一個視圖控制器,但它不知道比這更具體的細節。 您的ECSlidingViewController類是UIViewController的子類。 返回時,您的代碼將其轉換為更具體的對象,以便您可以將其作為實際更具體的對象。

暫無
暫無

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

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