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];
}
Но это не работает, первый диспетчер просмотра не отображается.
И второй логически отображается с помощью кнопки "Назад".
Я просто хочу заменить это первое представление другим в качестве начала процесса навигации.
Ответы
Ответ 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