2012-04-12 2 views
1

ECSlidingViewControllerデモコードのためのapplicationDidFinishLaunching方法である:私はちょうどあなたがつかむことができますどのように取得しないUIWindowのrootViewControllerにアクセスしますか?ここ

ECSlidingViewController *slidingViewController = (ECSlidingViewController*)self.window.rootViewController; 

- (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; 
} 

私には意味がありませんどのような最初の行ですウィンドウのルートビューのコントローラー、あなたが好きなようにそれをキャストしますか?その行は正確に何を行い、どのように機能しますか?

答えて

4

あなたのストーリーボードには、ルートビューコントローラー用に設定されたシーンがあります(つまり、プロパティ内でrootViewControllerチェックボックスがオンになっていて、キャンバスの最初の矢印がこのビューコントローラーを指しています)。そのビューコントローラのクラスは、プロパティインスペクタで設定します。あなたの場合、クラスはECSlidingViewControllerに設定されています。これは、ストーリーボードがインスタンス化するオブジェクトのクラスを決定します。

UIWindowには、そのオブジェクトを返すプロパティrootViewControllerがあります。 UIWindowのプロパティの型はUIViewControllerです - ウィンドウはそれがビューコントローラであることを知っていますが、それ以上の詳細は分かりません。 ECSlidingViewControllerクラスはUIViewControllerのサブクラスです。それが返されると、コードはより具体的なオブジェクトとしてキャストされ、実際にはより具体的なオブジェクトとして扱うことができます。

関連する問題