は、ナビゲーションコントローラのデリゲートメソッドを実装します:どのようにこのチュートリアルでチェックしてください
- (void)navigationController:(UINavigationController *)navigationController didShowViewController:(UIViewController *)viewController animated:(BOOL)animated
これは、ナビゲーションコントローラのスタック内のすべてのVCのために発生します。
は何がやりたいことは、あなたがそれで削除したいビューコントローラなしで全体のナビゲーションコントローラのスタックを置き換えるです(すぐにナビゲーションコントローラの後にVCでこのコードを入れて、.h
に> < UINavigationControllerDelegate
置きます)。変更不可能な配列なので、VCを削除する前に変更可能な配列に変換し、VCを削除してから、ナビゲーションコントローラのスタックを呼び出す[self.navigationController setViewControllers:newVCs animated:NO];
に置き換える必要があります。それは重要な部分です。あなたはページを読み込んだ後にスタックを置き換えていますが、あなたが使っているVCを保持しているので、それはまだスタックの一番上のアイテムなので、ユーザーには目に見える影響はありません。スタックにたくさんのVCがない限り、それは高価な呼び出しではありません。
は、ここで私は、デリゲートメソッドでそれをやった方法は次のとおりです。
//Remove list setup page if new list was created
if ([self.navigationController topViewController].class == [ItemViewController class])
{
NSArray *VCs = [self.navigationController viewControllers];
if(((UITableViewController*)[VCs objectAtIndex:[VCs count]-2]).class == [NewCardTypeController class])
{
NewCardTypeController *removedObject = [VCs objectAtIndex:[VCs count]-2];
if(removedObject != nil)
{
NSMutableArray *newArray = [NSMutableArray arrayWithArray:VCs];
[newArray removeObject:removedObject];
NSArray *newVCs = [NSArray arrayWithArray:newArray];
[self.navigationController setViewControllers:newVCs animated:NO];
}
}
}
、突然何者か(あるいはあなた)あなたのプロジェクトを更新し、ナビゲーションコントローラのスタックに新しいVCを削除したり、追加します。そしてあなたのコードはうまくいきません(最良の場合)。マジックナンバーは常に悪です。 – slxl