2012-05-15 7 views
5

ストーリーボードからデフォルトのビューコントローラーをオーバーライドして、別のコントローラーを表示することは可能ですか?これはAppDelegateですべて発生します。ストーリーボードのデフォルトのビューコントローラーを実行時に変更する

+1

デフォルトのViewControllerは、最新のSDKのinfo.pListで宣言されています。スタートアップ時に何かを確認してから、どのビューコントローラがプッシュするかを決定する必要がありますか? – Martol1ni

+0

@ Martol1niはい、あなたが言ったことはまさに私が探しているものです。 – Jacksonkr

+0

あなたはUINavigationControllerを使用していますか? – Martol1ni

答えて

10

@ Martol1ni私はあなたの答えを使いたいと思っていましたが、不要なストーリーボードの乱雑さから離れていたので、少しコードを微調整しました。しかし、私はあなたに感動的な答えを+1しました。

次のすべてをデフォルトコントローラに置きます。

- (void)gotoScreen:(NSString *)theScreen 
{ 
    AppDelegate *app = (AppDelegate *)[[UIApplication sharedApplication] delegate]; 

    UIViewController *screen = [self.storyboard instantiateViewControllerWithIdentifier:theScreen]; 
    [app.window setRootViewController:screen]; 
} 

ロジックが発生する場所では、必要に応じて次のように呼び出します。

if(myBool == YES) { 
    [self gotoScreen:@"theIdentifier"]; 
} 
5

私は間違いなくUINavigationControllerにrootViewを埋め込むので、2つではなく3つのビューがあります。その人は、他のすべての人たちを支配するだけで、立ち上げられることはありません。次に、このようにメソッドを実装します。

- (void) decideViewController { 
    NSString * result; 
    if (myBool) { 
     result = @"yourIdentifier"; 
    } 
    else { 
     result = @"yourOtherIdentifier"; 
    } 
    self.navigationController.navigationBarHidden = YES; // Assuming you don't want a navigationbar 
    UIViewController *screen = [self.storyboard instantiateViewControllerWithIdentifier:@"view1ident"]; 
    [self.navigationController pushViewController:screen animated:NO]; // so it looks like it's the first view to get loaded 
} 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    [self decideViewController]; 
} 

最初のビューがロードされたようなことはありません。 NIBSを使用している場合は、AppDelegateからすべてを行うことができます。

関連する問題