1

下面是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;

我只是不明白你怎么能抓住窗口的根视图控制器,然后像你喜欢的那样投射它?那条线到底是做什么的,它是如何工作的?

4

1 回答 1

4

在您的故事板中,您为根视图控制器设置了一个场景(即在属性中选中了 rootViewController 复选框,并且画布上的初始箭头指向该视图控制器)。该视图控制器的类在属性检查器中设置。在您的情况下,课程设置为ECSlidingViewController. 这决定了故事板将实例化的对象的类。

UIWindow 有一个rootViewController返回该对象的属性。UIWindow 上的属性类型是UIViewController- 所以窗口知道它是一个视图控制器,但它不知道比这更多的细节。您ECSlidingViewController的类是UIViewController. 当它返回时,您的代码会将其转换为更具体的对象,以便您可以将其作为实际更具体的对象来使用。

于 2012-04-13T00:28:14.197 回答