[英]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.