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

IPhone - Замена rootview в контроллере навигации

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

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

Итак, я:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{   
    // Override point for customization after application launch.
    // Add the navigation controller 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];
}

Но это не работает, первый диспетчер просмотра не отображается. И второй логически отображается с помощью кнопки "Назад".

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

4b9b3361

Ответ 1

Из Ссылка на UINavigationController:

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

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

- (void) goNext {

    NextViewController* nextWindow = [[[NextViewController alloc] initWithNibName:@"NextView" bundle:nil] autorelease];
    [self.navigationController setViewControllers:[NSArray arrayWithObject:detailViewController] animated:YES];
}

Ответ 2

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

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

- (void)setViewControllers:(NSArray *)viewControllers animated:(BOOL)animated