在tabbar里面的导航栏内的iphone推视图控制器

man*_*urt 2 iphone uitabbarcontroller uinavigationcontroller pushviewcontroller ios

我的应用程序有一个带导航栏的tabBar,

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;



}
Run Code Online (Sandbox Code Playgroud)

它显示标签确定,

但在其中一个页面中我推出了新视图

[self.navigationController pushViewController:bigPhotoView animated:YES];
Run Code Online (Sandbox Code Playgroud)

但它不起作用.

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

小智 5

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

如果你想拥有一个可以推送新视图控制器和弹出视图控制器的视图控制器,你需要首先创建一个堆栈(UINavigationController),在这个堆栈中推送你的视图控制器.现在,由于堆栈存在,我们可以继续在此堆栈中推送新的视图控制器.

您的bigPhotoView可能没有被推送,因为当前视图控制器(您从中尝试推送bigPhotoView)没有UINavigationController.这可以通过以下方式验证:

if (self.navigationController != nil) {
    [self.navigationController pushViewController:bigPhotoView animated:YES];
}
Run Code Online (Sandbox Code Playgroud)

在上述情况下,您可能不会输入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;
}
Run Code Online (Sandbox Code Playgroud)

是UINavigationController的官方苹果文档