Как насчет нажатия петель до их конечных пределов
for(var a=0; a<data_a.length; a++){
for(var b=0; b<data_b.length; b++){
for(var c=0; c<data_c.length; c++){
for(var d=0; d<data_d.length; d++){
a = data_a.length;
b = data_b.length;
c = data_b.length;
d = data_d.length;
}
}
}
}
Довольно просто, когда нужно нажать третийViewController вместо простого pushViewController
, сделайте следующее:
NSArray * viewControllers = [self.navigationController viewControllers];
NSArray * newViewControllers = [NSArray arrayWithObjects:[viewControllers objectAtIndex:0], [viewControllers objectAtIndex:1], thirdController,nil];
[self.navigationController setViewControllers:newViewControllers];
где [viewControllers objectAtIndex:0]
и [viewControllers objectAtIndex:1]
- ваш rootViewController и ваш FirstViewController.
NSMutableArray *viewController = [NSMutableArray arrayWithArray:[navController viewControllers]];
[viewController replaceObjectAtIndex:1 withObject:replacementController];
[navController setViewControllers:viewController];
См. ссылку на класс UINavigationController для получения дополнительной информации.
Так как вы просто пытаетесь дважды выскочить из стека ViewControllers, вы, вероятно, можете получить тот же результат, вызвав
- (NSArray *)popToViewController:(UIViewController *)viewController animated:(BOOL)animated
с помощью кнопки «Назад» thirdViewController
Более чистый путь в Свифте должен быть:
extension UINavigationController {
func replaceTopViewController(with viewController: UIViewController, animated: Bool) {
var vcs = viewControllers
vcs[vcs.count - 1] = viewController
setViewControllers(vcs, animated: animated)
}
}
extension UINavigationController {
func setTop(viewController: UIViewController) {
viewControllers = [viewController]
}
}
Невозможно анимировать переход, если вы просто замените viewController
в массиве контроллеров представления навигационных контроллеров. Я бы порекомендовал сделать следующее в методе viewWillAppear
контроллера третьего вида.
-(void) viewWillAppear:(BOOL)animated
{
NSArray *vCs=[[self navigationController] viewControllers];
NSMutableArray *nvCs=nil;
//remove the view controller before the current view controller
nvCs=[[NSMutableArray alloc]initWithArray:vCs];
[nvCs removeObjectAtIndex:([nvCs count]-2)];
[[self navigationController] setViewControllers:nvCs];
[super viewWillAppear:animated];
}
- (void)swapTopViewController:(UIViewController *)topViewController{
NSArray *viewControllers = [self.navigationController viewControllers];
NSMutableArray *editableViewControllers = [NSMutableArray arrayWithArray:viewControllers];
[editableViewControllers removeLastObject];
[editableViewControllers addObject:topViewController];
[self.navigationController setViewControllers:editableViewControllers];
}
Версия Swift 4:
if var viewControllers = navigationController?.viewControllers {
viewControllers[viewControllers.count - 1] = newViewController
navigationController?.viewControllers = viewControllers
}