Как поместить с одного контроллера вида на другой контроллер представления
Использование iOS У меня есть 15 ViewControllers, теперь я хочу поместить из одного ViewController в другой контроллер просмотра.
Я использую этот код:
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];
Этот код прав, чтобы поп от третьегоViewController к secondViewController. Но что случилось, когда мы выходим из девятого (9-го) ViewController в пятый (5-й) ViewController, тогда я использую этот код в девятом (9-м) ViewController:
NSArray *array = [self.navigationController viewControllers];
[self.navigationController popToViewController:[array objectAtIndex:4] animated:YES];
Он не появляется с девятого (9-го) ViewController до пятого (5-го) ViewController, кроме того, что он отображает девятый (9-й) элемент управления ViewController до восьмого (восьмого) 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;
Я не знаю, почему показывают только контроллеры Four View. Всякий раз, когда я использую 15 View Controllers. Эта проблема возникает в каждом контроллере представления. Например, если я использую pop-форму 15-го (15-го) ViewController для пятого (5-го) ViewController, то та же проблема проявляется.
NSArray *array = [self.navigationController viewControllers];
NsLog(@"array = %@",array);
array= First(1st)ViewController;
Second(2nd)ViewController;
fourteenth(14th)ViewController;
fifteenth(15th)ViewController;
Я хочу подсчитать количество ViewControllers и затем перейти к определенному ViewController.
Ответы
Ответ 1
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
}
}
Ответ 2
Вы не можете перейти к новому контроллеру представления (как, например, с вашим примером secondViewController).
При использовании UINavigationController вы
Добавить контроллер в стек:
[self.navigationController pushViewController:<yournewViewController> animated:YES];
Поставить на предыдущий с помощью
[self.navigationController popViewControllerAnimated:YES];
Попасть к предыдущему контроллеру в стеке (должно быть, было нажато до):
[self.navigationController popToViewController:<ViewControllerToPopTo> animated:YES];
Вернитесь к корневому контроллеру с помощью
[self.navigationController popToRootViewControllerAnimated:YES];
Ответ 3
for (UIViewController *controller in self.navigationController.viewControllers)
{
if ([controller isKindOfClass:[nameOfYourViewControllerYouWantToNavigate class]])
{
[self.navigationController popToViewController:controller animated:YES];
break;
}
}
Ответ 4
Попробуйте это
[self.navigationController popToViewController:[self.navigationController.viewControllers objectAtIndex:0] animated:YES];
Ответ 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];
}
}
Ответ 6
Попробуйте это
MyTableViewController *vc = [[MyTableViewController alloc] init];
NSMutableArray *controllers = [NSMutableArray
arrayWithArray:self.navigationController.viewControllers];
[controllers removeLastObject];
[controllers addObject:vc];
Ответ 7
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];
}
Ответ 8
Для Swift 3.0 используйте фильтр:
let desiredViewController = self.navigationController!.viewControllers.filter { $0 is YourViewController }.first!
self.navigationController!.popToViewController(desiredViewController, animated: true)