iphone push view контроллер внутри навигационной панели внутри вкладки
У меня есть приложение, которое имеет вкладку с панелью навигации,
Панель вкладок отображается и работает, но когда я хочу перейти на другую страницу внутри одной из вкладок, она не загружает новую страницу,
здесь мой делегат приложения
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
self.tabBarController = [[[UITabBarController alloc] init] autorelease];
StartViewController *startViewControllerView = [[[StartViewController alloc] init] autorelease]; //ojo recomendado por apple!!!
PhotosViewController* PhotosViewController_ = [[[PhotosViewController alloc] init] autorelease];
VideosViewController* VideosViewController_ = [[[VideosViewController alloc] init] autorelease];
SocialViewController* SocialViewController_ = [[[SocialViewController alloc] init] autorelease];
NSArray* controllers = [NSArray arrayWithObjects: startViewControllerView, VideosViewController_, PhotosViewController_, SocialViewController_, nil];
self.tabBarController.viewControllers = controllers;
self.pagesNavigation = [[[UINavigationController alloc] initWithRootViewController:startViewControllerView] autorelease];
self.pagesNavigation.navigationBarHidden = NO;
[self tabBarConfig];
[self.tabBarController setViewControllers:controllers animated:YES];
[self.window addSubview:self.pagesNavigation.view];
self.window.rootViewController = self.tabBarController;
//self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
[self.window makeKeyAndVisible];
return YES;
}
он показывает вкладки в порядке,
но на одной из страниц я выдвигаю новый вид с
[self.navigationController pushViewController:bigPhotoView animated:YES];
но это не работает
Так как же загрузить новый вид из моей вкладки?
1 ответ
UINavigationController
это стек контроллеров представления. Каждый контроллер представления имеет свойство, которое называется navigationController
, который представляет собой UINavigationController
к которому он принадлежит. Таким образом, если контроллер представления не принадлежит UINavigationController
(другими словами, если контроллер представления отсутствует в стеке), это navigationController
свойство будет ноль.
Если вы хотите иметь контроллер представления, из которого вы могли бы выдвигать новые контроллеры представления и всплывающие контроллеры представления, вам сначала нужно создать стек (UINavigationController), поместите свой контроллер представления в этот стек. Теперь, так как стек существует, мы можем продолжать помещать новые контроллеры представления в этот стек.
Ваш bigPhotoView не выдвигается, вероятно, потому что для текущего контроллера представления не существует UINavigationController (из которого вы пытаетесь выдвинуть bigPhotoView). Это можно проверить следующим образом:
if (self.navigationController != nil) {
[self.navigationController pushViewController:bigPhotoView animated:YES];
}
В приведенном выше случае вы можете не ввести оператор if.
Я кратко подготовил вашу функцию. Это выглядит примерно так.
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Create Start view controller.
StartViewController *startController = [[StartViewController alloc] init];
UINavigationController *startViewNavigationController = [[UINavigationController alloc] initWithRootViewController:startController];
[startController release];
// Similarly create for photos, videos and social...
// Create an array of view controllers.
NSArray* controllers = [NSArray arrayWithObjects:startViewNavigationController, photosViewNavigationController, videosViewNavigationController, socialViewNavigationController, nil];
// Create our tab bar controller.
self.tabBarController = [[[UITabBarController alloc] init] autorelease];
// Set the view controllers of the tab bar controller.
self.tabBarController.viewControllers = controllers;
// Release the startViewNavigationController, photosViewNavigationController, videosViewNavigationController, socialViewNavigationController...
// I don't know what this does.
[self tabBarConfig];
// Add the tab bar controller to the window.
[self.window addSubview:self.tabBarController.view];
[self.window makeKeyAndVisible];
return YES;
}
Вот официальная документация Apple для UINavigationController