Проверьте, загружен ли уже контроллер XCode - PullRequest
1 голос
/ 23 мая 2011

У меня есть следующий код для добавления нового ViewController в Split View Controller:

Level4ViewController *controller = [[Level4ViewController alloc] initWithNibName:@"ModuleViewController" bundle:nil];
    [[detailViewController navigationController] pushViewController:controller animated:YES];
    [controller release], controller = nil;

Единственная проблема, с которой я столкнулся, если я запустил это снова, новый контроллер покажет, я быхотел бы иметь возможность перейти к тому мнению, которое у меня было раньше, со всеми моими данными.

Может ли кто-нибудь помочь мне здесь.

Спасибо.

РЕДАКТИРОВАТЬ:

Обновлен код?

Level4ViewController *controller;
    for(UIView *view in self.navigationController.viewControllers)
    {
        if([view isKindOfClass:[Level4ViewController class]])
        {
            controller = view;
            if(controller == nil)
            {
                controller = [[Level4ViewController alloc] initWithNibName:@"ModuleViewController" bundle:nil];
            }
            else {
                controller = [self.navigationController.viewControllers objectAtIndex:1];
            }

        }
    }

    [[detailViewController navigationController] pushViewController:controller animated:YES];
    [controller release], controller = nil;

Ответы [ 2 ]

1 голос
/ 23 мая 2011

UINavigationController имеет свойство viewControllers, которое представляет собой NSArray, в котором хранится весь стек, который был передан в контроллер навигации. В этом массиве вы можете проверить контроллер вида, если он там используется, -вы проверяете вот так -

Level4ViewController *lvc;

for(UIView *view in self.navigationController.viewControllers)
{
     if([view isKindOfClass:[Level4ViewController class]])
     {
          lvc = view;
     }
}

и если вы уже знаете, в каком индексе находится ваш viewcontroller, вы можете получить его из этого индекса как -

Level4ViewController *lvc = [self.navigationController.viewControllers objectAtIndex:1];

update -

Level4ViewController *controller;
for(UIView *view in self.navigationController.viewControllers)
{
     if([view isKindOfClass:[Level4ViewController class]])
     {
         controller = view;
     }
}

if(controller == nil)
{
    controller = [[Level4ViewController alloc] initWithNibName:@"ModuleViewController" bundle:nil];
}

[[detailViewController navigationController] pushViewController:controller animated:YES];
[controller release], controller = nil;
0 голосов
/ 29 сентября 2013

Если вы используете навигационный контроллер

FirstScreenViewController *firstScreenVC = [self.storyboard instantiateViewControllerWithIdentifier:@"1S"];

    if (![self.navigationController.topViewController isKindOfClass:FirstScreenViewController.class])
        [self.navigationController pushViewController:firstScreenVC animated:YES];
...