【问题标题】:how can I keep the tab bar order consistent but change the default view controller?如何保持标签栏顺序一致但更改默认视图控制器?
【发布时间】:2013-11-27 17:21:09
【问题描述】:

我有几个视图控制器连接到我的 tabbarcontroller。每个都相应地命名,FirstVC,SecondVC 等。当我打开让我们说 ThirdVC 并按下一个按钮时,我希望它调出另一个 VC,我们称之为 ThirdChildVC,然后在 ThirdChildVC 上有一个返回到 ThirdVC 的按钮。我能做到这一点的唯一方法是包含以下代码:

[[[UIApplication sharedApplication] delegate] performSelector:@selector(setupRootViewController1)];

并调用另一个方法,我们称之为 setupRVC1,它与 setupRVC(见下文)相同,除了选项卡中显示的 VC 的顺序。但是,我希望能够保持 tabbaritems 的顺序,以便它始终按顺序显示 FirstVC、SecondVC 等,但是当按下 ThirdChildVC 上的按钮时,能够将 ThirdVC 显示为默认 VC。

- (void)setupRVC
{
    UIViewController *firstVC = [[FirstVC alloc]initWithNibName:@"FirstVC" bundle:nil];
    UIViewController *secondVC = [[SecondVC alloc]initWithNibName:@"SecondVC" bundle:nil];
    UIViewController *thirdVC = [[ThirdVC alloc]initWithNibName:@"ThirdVC" bundle:nil];
    UIViewController *fourthVC = [[FourthVC alloc]initWithNibName:@"FourthVC" bundle:nil];
    UIViewController *fifthVC = [[FifthVC alloc]initWithNibName:@"FifthVC" bundle:nil];
    self.tabBarController = [[UITabBarController alloc]init];
    self.tabBarController.viewControllers = @[firstVC, secondVC, thirdVC, fourthVC, fifthVC];
    self.window.rootViewController = self.tabBarController;
    [self.window makeKeyAndVisible];

- (void)setupRVC1
{
    UIViewController *firstVC = [[FirstVC alloc]initWithNibName:@"FirstVC" bundle:nil];
    UIViewController *secondVC = [[SecondVC alloc]initWithNibName:@"SecondVC" bundle:nil];
    UIViewController *thirdVC = [[ThirdVC alloc]initWithNibName:@"ThirdVC" bundle:nil];
    UIViewController *fourthVC = [[FourthVC alloc]initWithNibName:@"FourthVC" bundle:nil];
    UIViewController *fifthVC = [[FifthVC alloc]initWithNibName:@"FifthVC" bundle:nil];
    self.tabBarController = [[UITabBarController alloc]init];
    self.tabBarController.viewControllers = @[ThirdVC, FirstVC, SecondVC, ThirdVC, FourthVC, FifthVC];
    self.window.rootViewController = self.tabBarController;
    [self.window makeKeyAndVisible];

【问题讨论】:

    标签: ios objective-c uiviewcontroller uitabbarcontroller


    【解决方案1】:

    您需要做的是为每个视图控制器创建一个导航控制器,然后将所有导航控制器添加到 TabBar 控制器中。这是我创建的应用程序的示例

    NSMutableArray *tabBarItems = [@[] mutableCopy];
    WorkingTableViewController *workingTableVC = [[WorkingTableViewController alloc] initWithStyle:UITableViewStylePlain];
    UINavigationController *workingNavController = [[UINavigationController alloc] initWithRootViewController:workingTableVC];
    
    ClosedTableViewController *closedTableVC = [[ClosedTableViewController alloc] init];
    UINavigationController *closedNavController = [[UINavigationController alloc] initWithRootViewController:closedTableVC];
    
    [tabBarItems addObject:workingNavController];
    [tabBarItems addObject:closedNavController];
    
    tabBarController.viewControllers = tabBarItems;
    

    设置完成后,每次切换到不同的 VC 时,您应该能够将视图控制器推送和弹出到导航堆栈中,而无需重新构建任何内容。

    编辑:试试这个,让我知道它是否有效

    UIViewController *firstVC = [[FirstVC alloc]initWithNibName:@"FirstVC" bundle:nil];
    UINavigationController *firstNavController = [[UINavigationController alloc] initWithRootViewController:firstVC];
    
    UIViewController *secondVC = [[SecondVC alloc]initWithNibName:@"SecondVC" bundle:nil];
    UINavigationController *secondNavController = [[UINavigationController alloc] initWithRootViewController:secondVC];
    
    UIViewController *thirdVC = [[ThirdVC alloc]initWithNibName:@"ThirdVC" bundle:nil];
    UINavigationController *thirdNavController = [[UINavigationController alloc] initWithRootViewController:thirdVC];
    
    UIViewController *fourthVC = [[FourthVC alloc]initWithNibName:@"FourthVC" bundle:nil];
    UINavigationController *fourthNavController = [[UINavigationController alloc] initWithRootViewController:fourthVC];
    
    UIViewController *fifthVC = [[FifthVC alloc]initWithNibName:@"FifthVC" bundle:nil];
    UINavigationController *fifthNavController = [[UINavigationController alloc] initWithRootViewController:fifthVC];
    
    self.tabBarController = [[UITabBarController alloc]init];
    self.tabBarController.viewControllers = @[firstNavController, secondNavController, thirdNavController, fourthNavController, fifthNavController];
    self.window.rootViewController = self.tabBarController;
    [self.window makeKeyAndVisible];
    

    【讨论】:

    • 很好,但是 ClosedTableViewController 是什么?
    • ClosedTableViewController 只是 UITableViewController 的一个子类。正如我所提到的,这些只是我项目中的类。我将更新代码以使用您的类。
    猜你喜欢
    • 2017-08-23
    • 1970-01-01
    • 2020-07-13
    • 1970-01-01
    • 1970-01-01
    • 2021-08-09
    • 2012-03-30
    • 2020-07-29
    • 1970-01-01
    相关资源
    最近更新 更多