5

ストーリーボードからデフォルトのView Controllerをオーバーライドして、代わりに別のコントローラーを表示することは可能ですか? もちろん、これはすべて AppDelegate で発生します。

4

2 に答える 2

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"];
}
于 2012-05-16T13:46:34.683 に答える
5

私は間違いなく UINavigationController に rootView を埋め込むので、ビューは 2 つではなく 3 つになります。他のすべてのものを制御するだけで、1 つが起動されることはありません。次に、次のようにメソッドを実装します。

- (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 からすべてを実行できますが...

于 2012-05-16T00:30:51.913 に答える