1

ビューコントローラーをナビゲーションコントローラースタックに「プッシュしない」ために使用するトリックの種類を知りたい(iOS)

私はこれを持っています:
ユーザーがログに記録されていない場合は、ビュー A を表示してから B を表示し
ます ユーザーがログに記録されている場合は、B を表示します

ストーリーボードを使用しているため、ユーザーがログに記録されている場合は performSegue を使用したため、ユーザーは直接 B に移動します。 、Navigation Controller はスタック内のビュー A のプッシュを取得します。

スタックのレベルをボイドでポップアウトすることを考えていました(しかし、これを行う方法がわかりません)。
ビューをナビゲーションコントローラースタックにプッシュしないことも考えていました(ただし、これを行う方法がわかりません)。

ありがとう


アップデート :

私はこれを試しました:

//The view B
TabBarMain* mainViewController = [[TabBarMain alloc] init];
//If already logged in
if([username length] == 0)
{
    NSArray *viewControllers = [NSArray arrayWithObject:mainViewController];
    [self.navigationController setViewControllers:viewControllers animated:NO];
}

このコードの問題は、黒い画面が表示されることです (クラッシュしません)。何かを初期化する必要があるようですが、TabBarMain.m には何もありません。そこに何を書くべきかわかりません。この TabBarMain は、ストーリーボードのタブ バー コントローラーにリンクされています。

他に方法はありませんか?

4

1 に答える 1

1

rootViewController の viewDidLoad でサイズを確認してみてください。

- (void)viewDidLoad
{
    NSArray *viewControllers

    if (logged) {
        NSArray *viewControllers = [NSArray arrayWithObject:viewControllerB];
    } else {
        NSArray *viewControllers = [NSArray arrayWithObject:viewControllerA];
    }

    [self.navigationController setViewControllers:viewControllers animated:NO];
}

viewController はストーリーボードにリンクされており、コードでインスタンス化されていないため、空のコードではなくストーリーボードからインスタンス化する必要があります。識別子がストーリーボードの ViewController の識別子と一致していることを確認してください。

TabBarMain *mainViewController = [[UIStoryboard storyboardWithName:@"MainStoryboard" bundle:NULL] instantiateViewControllerWithIdentifier:@"tabBarMain"];
于 2012-05-06T20:58:09.213 に答える