2013-11-20 9 views
7

私がやりたいことはかなりシンプルだと思われますが、ウェブ上で回答が見つかりません。私は、ルートビューコントローラとタブバーコントローラとしてログイン画面を持っているし、すべてのタブで私はナビゲーションコントローラがあります。ストーリーボードのルートビューコントローラーに戻るにはどうすればいいですか?

Iは、ストーリーボードを使用していると階層が以下に記載される、

Root VC 
    | 
    --- tabbar controller 
      | 
      ---Navigation Controller 
       | 
       --- VC1 

要件は、VC1からルート・ビュー・コントローラに戻ってナビゲートすることです。どうすればこれを達成できますか?次のコード

+2

あなたがこれを行うにはアンワインドセグエを使用する必要があります。 – rdelmar

+0

あなたの答えを@rdelmarありがとう、私はあなたの解決に同意した。しかし、私が今直面している問題は、私はそれを解くためにストーリーボードのボタンを終了するためにボタンのアウトレットを接続することができません。それはアクセス可能ではなかったようです。これで私を助けてくれますか? –

+0

ここで私の答えを見てください(http://stackoverflow.com/questions/16158586/app-running-slow-after-loading-viewcontroller-then-unload-about-15-20-times/16160239#16160239)。それがあなたがそれをやろうとしているところなら。 – rdelmar

答えて

3

「Unwind Segues」を使用して問題の解決を得ました。

ステップ1)あなたが必要とする最小限のものは、目的のビュー(以前はナビゲーション内にポップアップしていたビューを元に戻したい)のビューコントローラをサブクラス化し、このようなメソッドを追加することです(メソッド名は、あなたが望む何もすることができますが、すべてはあなたの全体のアプリでseguesをほどくが一緒に記載されていますので、それが一意である必要があります):

- (IBAction)unwindToViewControllerNameHere:(UIStoryboardSegue *)segue { 
//nothing goes here 
} 

ステップ2)さて、そのソース・ビュー(別名、ビューにあなたは元のビューの一番下にある小さな緑色の「EXIT」アイコンまで、ボタンからのセグをドラッグするだけです。 " - unwindToViewControllerNameHere"に接続するオプションがあるはずです

これで、ボタンがタップされたときにあなたのセグが巻き戻されます。必要なビューコントローラに移動し、残りのビューコントローラを解放します。

0

使用は

- (void) forRootViewCon { 
    UINavigationController *nav = (UINavigationController*) self.view.window.rootViewController; 
    UIViewController *root = [nav.viewControllers objectAtIndex:0]; 
    [root performSelector:@selector(returnToRoot)]; 
} 

Callメソッド名は、returnToRoot

- (void)returnToRoot { 
    [self dismissViewControllerAnimated:NO completion:nil]; 
    [self.navigationController popToRootViewControllerAnimated:YES]; 
} 

OR

[self.navigationController popToRootViewControllerAnimated:YES]; 
0

これは十分なはずです。

[self.navigationController popToRootViewControllerAnimated:YES]; 
0

あなたはナビゲーションコントローラにルートVCを有効にする必要があります。

---ナビゲーションコントローラ - |ルートVC | ---タブバーコントローラ|その後、--- VC1

そしてEDIT

[navController popToRootViewControllerAnimated:YES]; 

を呼び出す: 私はあなたがナビゲーションコントローラ内部のタブバーコントローラを含む問題を持っていると思いますか?

+0

答えをありがとうが、私はタブバーコントローラのナビゲーションについて知りたい。 NavigationController - > Tabbar Controller - > Navigation Controllerのような階層を持つのは良くないと思います。 Appleはこれを提案しません。 –

+0

私はナビゲーションコントローラにルートVCを持っていますが、私はそれを隠しています。ルートビューに移動するには? – Gank

2

コントローラの階層が

の場合

---ナビゲーションコントローラ - ルートVC | ---タブバーコントローラ| ---ナビゲーションコントローラ - | --- VC1

とあなたが使用して、ルートのViewController(ルートVC)に移動したいというのクリックになるよう、VC1にUIButtonあり:ここmainnav

-(void)moveToRootViewController { 

    //Move to root viewController 
    UINavigationController *controller = [self.storyboard instantiateViewControllerWithIdentifier:@"mainnav"]; 

    self.view.window.rootViewController = controller; 

} 

は、ルートのViewControllerのストーリーボード識別子でありますナビゲーションコントローラ。

ViewControllers hierarchy

白色のViewControllerを写真によるとは、ルートのViewControllerであるとtabBarControllerは、ナビゲーションコントローラとの2つのタブを持っていて、その後、上記を使用してクリックUIButton(黒)のViewController 2番目のタブからルートのViewControllerに移動したい場合コード。

階層が の場合---ナビゲーションコントローラ - |ルートVC | --- VC1 ---- | --- VC2 ---- |

してから使用VC1またはVC2からルートのViewController(ルートVC)に移動したい:

[self.navigationController popToRootViewControllerAnimated:YES]; 
関連する問題