TabBarController 和 NavigationController

Posted

技术标签:

【中文标题】TabBarController 和 NavigationController【英文标题】:TabBarController and NavigationController 【发布时间】:2013-06-24 13:21:31 【问题描述】:

我正在制作一个应用程序,但我还是一个初学者,我正在尝试习惯 RootViewController 以及它应该如何设置。

在我的应用程序启动之初,我希望有一个不在我的 tabBarController 中的视图(设置为我的 rootViewController)。

我想问的是,我可以在我的 UITabBarController 启动之外有另一个视图,而不是在 tabBarController 的项目列表中吗?

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    // Override point for customization after application launch.

    FacebookFeedViewController *facebookClass = [[FacebookFeedViewController alloc] initWithNibName:@"FacebookFeedViewController" bundle:nil];

    TwitterFeedViewController *twitterClass = [[TwitterFeedViewController alloc] initWithNibName:@"TwitterFeedViewController" bundle:nil];
    LinkedInFeedViewController *linkClass = [[LinkedInFeedViewController alloc] initWithNibName:@"LinkedInFeedViewController" bundle:nil];
    FTLFullFeedViewController *masterClass = [[FTLFullFeedViewController alloc] initWithNibName:@"FTLFullFeedViewController" bundle:nil];

    ///   tab button title

    facebookClass.title = @"Facebook";
    twitterClass.title = @"Twitter";
    linkClass.title=@"LinkedIn";
    masterClass.title=@"FTL";

    // tab button Images
    facebookClass.tabBarItem.image = [UIImage imageNamed:@"facebook_32"];
    twitterClass.tabBarItem.image = [UIImage imageNamed:@"twitter_32"];

    WelcomeViewController *welcomeClass= [[WelcomeViewController alloc] initWithNibName:@"WelcomeViewController" bundle:nil];

    navController = [[ UINavigationController alloc] initWithRootViewController:welcomeClass];

    UINavigationController *navController2 = [[UINavigationController alloc] initWithRootViewController:facebookClass];
    UINavigationController *navController3 = [[UINavigationController alloc] initWithRootViewController:twitterClass];
    UINavigationController *navController4 = [[UINavigationController alloc] initWithRootViewController:linkClass];
    UINavigationController *navController5 = [[UINavigationController alloc] initWithRootViewController:masterClass];

    self.tabBarController = [[UITabBarController alloc] init];
    self.tabBarController.viewControllers = [NSArray arrayWithObjects:navController,navController5,navController2,navController3,navController4,nil];
    self.window.rootViewController = self.tabBarController;
    [self.window makeKeyAndVisible];

    return YES;

【问题讨论】:

你使用的是什么版本的 XCode?​​span> 最新版本,4.6.2 你在使用 Storyboard 吗? 不不,我没有使用故事板。我很想先了解应用程序的导航是如何以编程方式工作的。 您是在使用 XIB 还是从头开始创建视图控制器? 【参考方案1】:

我知道您已经选择了答案,但所做的只是将 UITabBar 视图推送到现有视图之上,而不是创建新的 UITabBarController 视图。根据我们的简短对话(最新的 XCode,没有 StoryBoard,使用 XIB),您将要创建一个 xib 作为 UITabBarController,然后将其推送到视图中......

View *view = [[View alloc] initWithNibName:@"myUITabBarXIB" bundle:nil];
view.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
[self presentModalViewController: view animated:YES];

当所需的操作发生时,这将显示您的 XIB 文件,但不会显示在现有视图控制器之上。

【讨论】:

非常感谢您的回答。这更有意义,这正是我所需要的。希望我能在未来帮助你。再次感谢。【参考方案2】:

是的!当然可以。

[self.view addsubview:yourTabbar.view];

希望这会对你有所帮助。

【讨论】:

我应该在 appDelegate 中使用它还是在要在其中显示 tabBar 的视图中使用它? 它与视图重叠,我如何删除下面的视图? 你需要在appDelegate中添加导航控制器。之后何时导航 viewController--> subviewController。在这里添加标签栏。

以上是关于TabBarController 和 NavigationController的主要内容,如果未能解决你的问题,请参考以下文章

TabbarController进行模块分类和管理

TabBarController 和 TableViews

使用 tabbarcontroller 代替 tab bar 和 tab bar item 的好处

TabBarController NAvigationController 和 UIViewController

TabbarController中ViewController的旋转

带有 NotificationCenter 和 TabBarController 的 UICollectionView 可区分数据源