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 に答える