1

私は4つのView ControllerクラスA、B、C、Dを持っています.

クラス A & B から「go」ボタンを押すと、クラス D が押されます。

アプリデリゲートにそれを行うメソッドがあります

-(void)showViewController {
    self.ViewController = [[[ViewController alloc] initWithNibName:@"View"     bundle:nil] autorelease];
    [self.navigationController pushViewController:self.ViewController animated:YES];
}

クラス D から「戻る」ボタンを押すと、クラス D を押したクラスに応じて、クラス A とクラス B のいずれかに戻ります。

- (void)popViewController {
    [self.navigationController popViewControllerAnimated:YES];
}

私が実装したいのは、クラス A がクラス D をプッシュするが、クラス D で「戻る」ボタンが押されたときに、クラス A ではなくクラス C に移動したい場合です。

次のコードを実装しようとしました

-(void)popToViewController{
    [self.navigationcontroller popToViewController:self.ClassCViewController animated:YES]
}

これにより、望ましくないクラス B の変更が発生します。

助言がありますか ?

4

2 に答える 2

3

だから私があなたに提案したいのは、時間をかけてデリゲートに関するアップルのドキュメントを読むことです。2 つのビューが同じ子ビューを持つことができるここで、まさにあなたが望むことを行います。そこから、子ビューでデリゲートを呼び出して、何をする必要があるかを把握します。

心に留めておくべきもう 1 つのことは、ビューをプッシュするビューを、そのビューをポップする責任もあるビューにすることをお勧めします。

編集:元の質問を支援し、正しい道を考えさせるためだけです。クラス D で [戻る] ボタンが押された場合、そこからデリゲート (クラス A またはクラス B のいずれか) のメソッドを呼び出して、同じクラスに移動させることができます。または、別のビューを表示したい場合は、デリゲート ビューにクラス C を表示させます。デリゲートを使用すると、クラス A にクラス C を表示させながら、クラス B をバックが押されたときに B に留まらせることができます。これがあなたの質問に答えることを願っています。

于 2013-01-07T20:00:11.523 に答える
2

ナビゲーション コントローラーで ViewController をプッシュすると、すべての ViewController がナビゲーション コントローラー内にプッシュされます。

ナビゲーション コントローラー スタックから viewController を見つけて、その選択したビュー コントローラーにポップします。

A-> B -> C -> D からナビゲートするとします。その後、通常 [self.navigationController popViewControllerAnimated:YES]; を使用してクラス D からビュー コントローラーをポップするとします。

その後、クラス C にポップします。

ただし、クラス B またはクラス A にポップする場合は、次のようにします。

-(void)popToSelectedViewController
{
  //get all view Controller from Stack of navigation controller
    NSArray *viewControllers=[self.navigationController viewControllers];

  //Declare an Object your selected class
    B  *homeVC=nil;

  //Find out you selected class where u want to pop
    for (int i=0; i<[viewControllers count]; i++)
    {
        UIViewController *tempVC=[viewControllers objectAtIndex:i];
        if([tempVC isKindOfClass:[B class]])
        {
            homeVC=[viewControllers objectAtIndex:i];
            break;
        }
    }


//pop to that selected class if found in stack otherwise popTo RootView
    if(homeVC)
        [self.navigationController popToViewController:homeVC animated:YES];
    else
        [self.navigationController popToRootViewControllerAnimated:YES];

}

これがお役に立てば幸いです

于 2013-01-07T20:06:16.407 に答える