以下是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;
我只是不知道你怎么能抓住窗口的根视图控制器,并按照你喜欢的方式投射它?这条线到底是做什么的,它是如何工作的?
答案 0 :(得分:4)
在故事板中,您为根视图控制器设置了一个场景(即,在属性中选中了rootViewController复选框,并且画布上的初始箭头指向此视图控制器)。该视图控制器的类在属性检查器中设置。在您的情况下,该类设置为ECSlidingViewController
。这决定了故事板将实例化的对象的类。
UIWindow有一个返回该对象的属性rootViewController
。 UIWindow上的属性类型是UIViewController
- 因此窗口知道它是一个视图控制器,但它不知道比这更具体的细节。您的ECSlidingViewController
类是UIViewController
的子类。返回时,您的代码将其转换为更具体的对象,以便您可以将其作为实际上更具体的对象使用。