iphone - 追加 - viewcontrollerとは




あるビューコントローラから別のビューコントローラにポップする方法 (5)

2番目のViewControllerの例のように、新しいView Controllerにポップすることはできません。

あなたがUINavigationControllerを使うとき

コントローラをスタックに追加するには:

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

前のものにポップする

[self.navigationController popViewControllerAnimated:YES];

スタック内の前のコントローラポップする (前にプッシュされていなければならない):

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

ルートコントローラに戻る

[self.navigationController popToRootViewControllerAnimated:YES];

iOSの使用私は15のViewControllerを持っています。今では1つのViewControllerから別のView Controllerにポップします。

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

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

これは、 this ViewController not existthis ViewController not existエラーを表示this ViewController not exist 、次にこのコードを使用しています。

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

このコードは、thirdViewControllerからsecondViewControllerにポップするのに適しています。 しかし、私たちが9番目(9番目)のViewControllerから5番目(5番目)のViewControllerにポップアップしたとき、9番目のViewControllerでこのコードを使用しています。

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

それは9番目(9番目)のViewControllerから8番目(8番目)のViewControllerをポップすることを除いて、9番目(9番目)のViewControllerから5番目の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つのView Controllerだけがなぜ表示されるのか分かりません。 15台のView Controllerを使用しているときはいつでも。 この問題は、各View Controllerで発生します。 例えば、私がポップフォームの15番目(15番目)のViewControllerを5番目の(5番目の)ViewControllerに使用している場合、同じ問題が現れます。

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

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

ViewControllerの数をカウントし、特定のViewControllerにポップしたいと思います。


Swift 3.0の場合は、filter:

let desiredViewController = self.navigationController!.viewControllers.filter { $0 is YourViewController }.first!
self.navigationController!.popToViewController(desiredViewController, animated: true)

これを試して

 [self.navigationController popToViewController:[self.navigationController.viewControllers objectAtIndex:0] animated:YES];

最初:

 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];
    }
}

for (UIViewController *controller in self.navigationController.viewControllers)
        {
            if ([controller isKindOfClass:[nameOfYourViewControllerYouWantToNavigate class]])
            {
                [self.navigationController popToViewController:controller animated:YES];

                break;
            }
        }




uipopovercontroller