iphone 追加 あるビューコントローラから別のビューコントローラにポップする方法




viewcontrollerとは (6)

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

MyTableViewController *vc = [[MyTableViewController alloc] init];
NSMutableArray *controllers = [NSMutableArray    
arrayWithArray:self.navigationController.viewControllers];
[controllers removeLastObject];
[controllers addObject:vc]; 

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にポップしたいと思います。


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

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

                break;
            }
        }

BOOL check = FALSE;
NSArray *viewControllers = [[self navigationController] viewControllers];
id obj;
for( int i=0;i<[viewControllers count];i++)
{
    obj=[viewControllers objectAtIndex:i];
    if([obj isKindOfClass:[yourclassname class]])
    {
        check = TRUE;
        break;
    }
}

if (check)
{

    [[self navigationController] popToViewController:obj animated:YES];
}
else
{
    yourclassname *yourclassnameObj=[self.storyboard instantiateViewControllerWithIdentifier:@"yourclassStoryBoardID"];
    [self.navigationController pushViewController:yourclassnameObj animated:true];

}

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




uipopovercontroller