IPhone push视图控制器inside navbar inside选项卡



我有一个应用程序,它有一个标签栏和一个导航栏,

标签栏正在显示,并且工作,但是当我想在其中一个选项卡内转到另一个页面时,它不加载新页面

这里是我的app委托

 - (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];

但是它不工作。

那么如何从选项卡加载新视图呢?

UINavigationController是一个视图控制器堆栈。每个视图控制器都有一个称为navigationController的属性,它表示它所属的UINavigationController。因此,如果视图控制器不属于UINavigationController(换句话说,如果视图控制器不存在于堆栈中),它的navigationController属性将为nil。

如果你想有一个视图控制器,你可以从它推送新的视图控制器和弹出视图控制器,你需要首先创建一个栈(UINavigationController),在这个栈中推送你的视图控制器。既然stack存在,我们可以继续在这个stack中推送新的视图控制器。

你的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;
}

这是苹果关于UINavigationController的官方文档

最新更新