2012-05-06 7 views
1

私はナビゲーションコントローラのスタックにビューコントローラ「を押していない」ために使用するトリックの種類を知っていただきたいと思います(iOS版)

セグをNavコントローラスタックにプッシュしない方法は? <br/> ユーザーがログインしていない場合は、ショービュー:

私はこれを持っていますA then show B
ユーザーがログに記録されている場合show B

ストーリーボードを使用しているので、ユーザーがログに記録されている場合はperformSegueを使用して、Bに直接行っています。スタックのビューAを押す。

私はいくつかの空白でスタックのレベルをポップアウトすることを考えていました(しかし、私はこれを行う方法がわかりません)。
私は、ビューをnavコントローラスタックにプッシュしないことも考えていました(しかし、私はこれを行う方法はわかりません)。

おかげ


アップデート:私はこれを試してみました

//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は、ストーリーボードのタブバーコントローラにリンクされています。

他に方法はありますか?

答えて

1

これは、rootViewControllerのviewDidLoadのサイズでお試しください。あなたのViewControllerは、ストーリーボードにリンクされたコードでインスタンス化されていないので

- (void)viewDidLoad 
{ 
    NSArray *viewControllers 

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

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

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

TabBarMain *mainViewController = [[UIStoryboard storyboardWithName:@"MainStoryboard" bundle:NULL] instantiateViewControllerWithIdentifier:@"tabBarMain"]; 
+0

私は(私のポストを更新しました)、これを試みたが、TabBarMainは、あなたがストーリーボードではない、基本的な初期化機能からinitにする必要がストーリーボードビューにリンクされている場合は本当に... = S – Kalzem

+0

動作しません。私は私の答えに追加しました。 –

+0

ホホホ!これは本当に効果的です! = Dありがとう! – Kalzem