使用iOS我现在有15个ViewControllers我想从一个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];
此代码适用于从thirdViewController弹出到secondViewController。但是当我们从第九个(第9个)ViewController弹出到第五个(第五个)ViewController然后我在第九个(第9个)ViewController中使用这个代码时发生了什么:
NSArray *array = [self.navigationController viewControllers];
[self.navigationController popToViewController:[array objectAtIndex:4] animated:YES];
它不会从Ninth(第9个)ViewController弹出到第五个(第五个)ViewController,它会将第九个(第9个)ViewController弹出到第八个(第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;
我不知道为什么只有四个视图控制器显示。每当我使用15个视图控制器时。每个视图控制器中都会出现此问题。例如,如果我使用pop形式第十五(15)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;
我想计算ViewControllers的数量,然后弹出到特定的ViewController。
Swift 4.0 - Swift 5.0
for controller in self.navigationController!.viewControllers as Array {
if controller.isKind(of: HomeViewController.self) {
self.navigationController!.popToViewController(controller, animated: true)
break
}
}
您无法弹出到新的视图控制器(就像使用secondViewController示例一样)。
当你使用UINavigationController时
将Controller添加到堆栈中:
[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;
}
}
试试这个
[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];
}
}
试试这样吧
MyTableViewController *vc = [[MyTableViewController alloc] init];
NSMutableArray *controllers = [NSMutableArray
arrayWithArray:self.navigationController.viewControllers];
[controllers removeLastObject];
[controllers addObject:vc];
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,请使用过滤器:
let desiredViewController = self.navigationController!.viewControllers.filter { $0 is YourViewController }.first!
self.navigationController!.popToViewController(desiredViewController, animated: true)