繁体   English   中英

标签栏内的导航栏内的iPhone推送视图控制器

[英]iphone push view controller inside navbar inside tabbar

我有一个带有带有导航栏的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;



}

它显示选项卡好,

但在其中一页中,我用

[self.navigationController pushViewController:bigPhotoView animated:YES];

但这不起作用。

那么如何从我的标签页加载新视图呢?

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

如果要使用一个视图控制器,可以从中推入新的视图控制器和弹出视图控制器,则需要首先创建一个堆栈(UINavigationController),然后将视图控制器推入该堆栈中。 现在,由于存在堆栈,我们可以继续在该堆栈中推送新的视图控制器。

您的bigPhotoView没有被推送,可能是因为当前视图控制器(您正在尝试从中推送bigPhotoView)不存在UINavigationController。 可以如下验证:

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的官方Apple文档

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM