iPhone - замена rootview в контроллере навигации - PullRequest
39 голосов
/ 16 июля 2011

У меня есть проект с NavigationController, который содержит в IB первый ViewController для отображения.Это просто шаблон по умолчанию при создании проекта.

В этом первом viewController я получаю какое-то событие, которое отправляю в appDelegate, и хочу, чтобы оно заменило этот rootview другим.Не собираюсь переходить к следующему.

Так что я делаю:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{   
    // Override point for customization after application launch.
    // Add the navigation controller's view to the window and display.
    self.window.rootViewController = self.navigationController;
    [self.window makeKeyAndVisible];
    return YES;
}

- (void) goNext {

    [self.navigationController popViewControllerAnimated:NO];

    NextViewController* nextWindow = [[[NextViewController alloc] initWithNibName:@"NextView" bundle:nil] autorelease];
    [self.navigationController pushViewController:nextWindow animated:NO];
}

Но это не сработает, первый view-контроллер не всплывает.А второй логически отображается с кнопкой «назад».

Я просто хочу заменить это первое представление на другое в качестве начала процесса навигации.

Ответы [ 2 ]

83 голосов
/ 16 июля 2011

С UINavigationController ссылка :

Этот метод (popViewControllerAnimated :) удаляет контроллер верхнего вида из стека и делает новая вершина стека активного представления контроллера. Если вид контроллер в верхней части стека является корневым контроллером представления, это метод ничего не делает Другими словами, вы не можете вставить последний элемент в стек.

Вместо этого вы можете попробовать метод setViewControllers:animated:.

- (void) goNext {

    NextViewController* nextWindow = [[[NextViewController alloc] initWithNibName:@"NextView" bundle:nil] autorelease];
    [self.navigationController setViewControllers:[NSArray arrayWithObject:detailViewController] animated:YES];
}
17 голосов
/ 16 июля 2011

Если контроллер представления в верхней части стека является корневым контроллером представления, popViewControllerAnimated ничего не делает.Другими словами, вы не можете вытолкнуть последний элемент в стеке.

Чтобы заменить контроллер корневого представления, используйте этот метод:

- (void)setViewControllers:(NSArray *)viewControllers animated:(BOOL)animated
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...