25

iOS を使用すると、15 個の ViewController があり、ある ViewController から別の View Controller にポップしたいと考えています。

私はこのコードを使用しています:

SecondViewController *Sec=[SecondViewController alloc]init];
[self.navigationController popViewController:Sec animated:YES];

これはエラーthis ViewController not existを示しており、次のコードを使用しています:

NSArray *array = [self.navigationController viewControllers];
[self.navigationController popToViewController:[array objectAtIndex:1] animated:YES];

このコードは、firstViewController から secondViewController にポップするのに適しています。しかし、9 番目 (9 番目) の ViewController から 5 番目 (5 番目) の ViewController にポップするとどうなるか、9 番目 (9 番目) の ViewController でこのコードを使用しています。

NSArray *array = [self.navigationController viewControllers];
[self.navigationController popToViewController:[array objectAtIndex:4] animated:YES];

9 番目 (9 番目) の ViewController から 5 番目 (5 番目) の ViewController にポップするのではなく、9 番目 (9 番目) の ViewController を 8 番目 (8 番目) の ViewController にポップします。この行を使用したときに何が起こったのかわかりません:

NSArray *array = [self.navigationController viewControllers];
NsLog(@"array = %@",array);

でこれを使うとNinth(9th)ViewController。NsLog は次のことを示します。

array=   First(1st)ViewController;  
         Second(2nd)ViewController;
         Eight(8th)ViewController;
         Ninth(9th)ViewController;

4 つのビュー コントローラーしか表示されない理由がわかりません。15個のView Controllerを使用しているときはいつでも。この問題は、各ビュー コントローラーで発生します。たとえば、pop form 15th(15th)ViewController から Fifth(5th)ViewController を使用している場合、同じ問題が発生します。

NSArray *array = [self.navigationController viewControllers];
NsLog(@"array = %@",array);

array=     First(1st)ViewController;  
           Second(2nd)ViewController;
           fourteenth(14th)ViewController;
           fifteenth(15th)ViewController;

Number of ViewControllers をカウントしてから、特定の ViewController にポップしたい。

4

8 に答える 8

38

新しいView Controllerにポップすることはできません(secondViewControllerの例のように)。

UINavigationController を使用する場合、

次のコマンドを使用して、 Controllerをスタックに追加します。

[self.navigationController pushViewController:<yournewViewController> animated:YES];

前のものにポップ

[self.navigationController popViewControllerAnimated:YES];

スタック内の前のコントローラーにポップします (以前にプッシュされている必要があります):

[self.navigationController popToViewController:<ViewControllerToPopTo> animated:YES];

ルートコントローラーに戻ります

[self.navigationController popToRootViewControllerAnimated:YES];
于 2013-07-25T14:11:47.630 に答える
7

これを試して

 [self.navigationController popToViewController:[self.navigationController.viewControllers objectAtIndex:0] animated:YES];
于 2015-01-27T13:38:33.403 に答える
5

初め:

 SecondViewController *Sec=[SecondViewController alloc]init];
 [self.navigationController popViewController:Sec animated:YES];

Secナビゲーション コントローラーにない新しいビュー コントローラーを割り当てるため、これを行うことはできません。

これを使用することを検討してください:

あなたは9ビューコントローラにいます

for (int i= 0 ; i < [[self.navigationController viewControllers]count] ; i++) {
    if ( [[[self.navigationController viewControllers] objectAtIndex:i] isKindOfClass:[FifiViewControllerClassname class]]) {
        [self.navigationController popToViewController:[array objectAtIndex:i] animated:YES];
    }
}
于 2013-07-25T13:59:44.483 に答える
1

このようにしてみてください

MyTableViewController *vc = [[MyTableViewController alloc] init];
NSMutableArray *controllers = [NSMutableArray    
arrayWithArray:self.navigationController.viewControllers];
[controllers removeLastObject];
[controllers addObject:vc]; 
于 2013-07-25T13:57:25.620 に答える