2011-01-07 7 views
5

私のアプリには、基本的なナビゲーションコントローラがあります。 1つを除いて、すべての私の見解のために、コントローラーは必要に応じて動作します。iPhone:ナビゲーションコントローラの戻るボタンを無効にするにはどうすればいいですか?

しかし、特に1つのビューでは、「戻る」ボタンは前のビューに戻らず、設定したビューに戻るようにしたいと思います。特に、2つのビューに戻り、1つをスキップします。

は、いくつかの研究を行った後、私はそれが消えたとき、私はビューを傍受できることがわかったので、私はそれが私がたいページに移動持つようにコードに入れてみました:

- (void)viewWillDisappear:(BOOL)animated { 
[super viewWillDisappear:animated]; 
//i set a flag to know that the back button was pressed 
if (viewPushed) { 
    viewPushed = NO; 
} else { 
    // Here, you know that back button was pressed 
    mainMenu *mainViewController = [[mainMenu alloc] initWithNibName:@"mainMenu" bundle:nil]; 
    [self.navigationController pushViewController:mainViewController animated:YES]; 
    [mainViewController release]; 
} 

}

それはうまくいきませんでした。だから誰にもアイデアはありますか?

ありがとうございます!

答えて

12

あなたのコードでは、余分なアイテムをポップするのではなく、別のビューコントローラをスタックにプッシュしようとしているようです。

戻って二つのレベルないあなたのコードとしてこれを試してみてください。また、あなたは完全にあなた自身のボタンで戻るボタンを置き換えることができ

NSArray *vcs = [self.navigationController viewControllers]; 
[self.navigationController popToViewController:[vcs objectAtIndex:[vcs count]-3]; 

を?あなたのViewControllerで:

UIBarButtonItem *item = [[UIBarButtonItem alloc] initWithTitle:@"Back" style:UIBarButtonItemStyleBordered target:self action:@selector(doSomething:)]; 

self.navigationItem.hidesBackButton = YES; 
self.navigationItem.leftBarButtonItem = item; 
[item release]; 

その後、あなたはdoSomethingのを書くことができます:メソッドは、おそらく私は上記の投稿のコードを使用して、スタックから2つの項目をポップします。

+0

これまでのところ素晴らしいです!あなたのお返事ありがとうございます!私は、カスタムボタンを作成し、メソッドを作成し、開いているビューのリストで配列を構築することができました。しかし、私はpopToViewController行をステップオーバーするときに 'キャッチされない例外'エラーが発生しています...私もこれを試した:[self.navigationController popToViewController:[vcs objectAtIndex:1]];無駄に。私は今popToViewControllerについてもっと研究しています。 –

+0

私は使用を終了しました:[self.navigationController popToViewController:[self.navigationController.viewControllers objectAtIndex:0] animated:YES]; 2つのレベルを戻すために..今まで素晴らしい作品、ありがとう! –

+0

トップレベルに戻る場合は、popToRootViewControllerAnimatedがあります。これはうまくいくはずです。 –

2

UINavigationBarDelegate代理人を実装することができます。メソッド-navigationBar:didPopItem:が呼び出されると、UINavigationControllerから追加アイテムをポップして、2つのアイテムを一度にポップすることができます。

+0

であります後方へのナビゲーションを確認する。違いは、UINavigationBarDelegateの - (BOOL)navigationBar:(UINavigationBar *)navigationBar shouldPopItem:(UINavigationItem *)アイテムメソッドを実装することです。 –

3

簡単な解決策:これは例えばUINavigationController popViewControllerAnimatedメソッドをオーバーライドする方法はまた、多かれ少なかれ

- (void)viewWillDisappear:(BOOL)animated { 
    //if true, back was pressed 
    if ([self.navigationController.viewControllers indexOfObject:self]==NSNotFound) { 
      //your logic 
    } 
} 
+0

清潔な解決策iOS 9で動作しますありがとう –

+0

何か戻る前に条件をチェックし、その条件が満たされない場合は、それを停止して戻るようにしたい場合はあなたは窓やアンドロイドを知っていて、e.handled = trueのようなものが好きです。 – Yawar

-1
UIButton *home = [UIButton buttonWithType:UIButtonTypeCustom]; 
UIImage *homeImage = [UIImage imageNamed:@"back.png"]; 
[home setBackgroundImage:homeImage forState:UIControlStateNormal]; 
[home addTarget:self action:@selector(LogOut) 
forControlEvents:UIControlEventTouchUpInside]; 
home.frame = CGRectMake(0, 0, 69, 26); 
UIBarButtonItem *button2 = [[UIBarButtonItem alloc] initWithCustomView:home]; 
[[self navigationItem] setLeftBarButtonItem:button2]; 
[button2 release]; 
button2 = nil;