这是 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;
我只是不明白你怎么能捕获窗口的 Root View Controller ,然后像你喜欢的那样转换它?那条线到底是做什么的,它是如何工作的?
最佳答案
在您的 Storyboard中,您为 Root View Controller 设置了一个场景(即,在属性中选中了 rootViewController 复选框,并且 Canvas 上的初始箭头指向该 View Controller )。该 View Controller 的类在属性检查器中设置。在您的情况下,类(class)设置为 ECSlidingViewController
.这决定了 Storyboard将实例化的对象的类。
UIWindow 有一个属性 rootViewController
返回该对象。 UIWindow 上的属性类型是UIViewController
- 所以窗口知道它是一个 View Controller ,但它不知道比这更多的细节。您的 ECSlidingViewController
类是 UIViewController
的子类.当它返回时,您的代码会将其转换为更具体的对象,以便您可以将其作为实际更具体的对象来使用。
关于iphone - 访问 UIWindow 的 rootViewController?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10133515/