iphone push view controller внутри панели навигации внутри панели вкладок - PullRequest
2 голосов
/ 21 августа 2011

У меня есть приложение, в котором есть вкладка с панелью навигации,

TabBar показывает, и работает, но когда я хочу перейти на другую страницу внутри одной из вкладок, она не загружает новую страницу,

вот мой делегат приложения

 - (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 Ответ

5 голосов
/ 21 августа 2011

UINavigationController - это стек контроллеров представления. Каждый контроллер представления имеет свойство, называемое navigationController, которое представляет UINavigationController, к которому он принадлежит. Таким образом, если контроллер представления не принадлежит UINavigationController (другими словами, если контроллер представления отсутствует в стеке), его свойство navigationController будет иметь значение nil.

Если вы хотите иметь контроллер представления, из которого вы могли бы выдвигать новые контроллеры представления и контроллеры всплывающего представления, вам сначала нужно создать стек (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

...