Подтвердить что ты не робот

Как поместить с одного контроллера вида на другой контроллер представления

Использование 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.

4b9b3361

Ответ 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)