自定义 UITabBarController 和 UINavigationController

2023-06-13移动开发问题
1

本文介绍了自定义 UITabBarController 和 UINavigationController的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着跟版网的小编来一起学习吧!

问题描述

我正在为 iOS5 及更高版本开发应用程序,我不使用情节提要或 IB.我正在创建一个自定义 UITabBarController 并在我的 AppDelegate 中放入 4 个视图控制器,其中只有 1 个 UINavigationController (不知道为什么).

I'm developing an app for iOS5 and up and I don't use storyboards or IB. I'm creating a custom UITabBarController and in my AppDelegate I'm putting in it 4 view controllers with only 1 UINavigationController (can't tell why).

这导致我只能从 first 选项卡推送新的 VC,这显然是打包到一个名为 navControllerUINavigationController 中>:

It results in a behaviour where I can push new VC only from the first tab, which is apparently, packed into a UINavigationController called navController:

SGTabBarController *tabBarController = [[SGTabBarController alloc] init];

    SGHomeViewController* vc1 = [[SGHomeViewController alloc] init];
    SGChooseOSAgainViewController* vc3 = [[SGChooseOSAgainViewController alloc] init];
    SGSmsServicesViewController* vc4 = [[SGSmsServicesViewController alloc] init];
    SGSupportViewController *vc5 = [[SGSupportViewController alloc] init];
    navController = [[UINavigationController alloc] initWithRootViewController:vc1];

    NSArray* controllers = [NSArray arrayWithObjects:navController, vc3, vc4, vc5, nil];
    tabBarController.viewControllers = controllers;

    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    self.window.rootViewController = tabBarController;
    [navController setNavigationBarHidden:YES animated:NO];
    [self.window makeKeyAndVisible];

这是为什么呢?我应该为每个选项卡创建一个单独的 UINavigationController 吗?我从 Apple 的文档中获取了这段代码.

Why is that? Should I create a separate UINavigationController for each tab? I took this code from Apple's documentation.

推荐答案

是的,你可以.尝试类似这样的代码在你的 UITabBarController.m 中:

Yes, you can. Try something like this code in yourUITabBarController.m:

- (void)viewDidLoad
{
  [super viewDidLoad];
    
  NSMutableArray* sectionViewControllers = nil;
  NSArray* controllers = [self controllers];
  UIViewController* controller = nil;
  
  for (controller in controllers)
  {
    if (sectionViewControllers == nil)
      sectionViewControllers = [NSMutableArray arrayWithCapacity:0];
    
    UINavigationController* navigationController = [[UINavigationController allocWithZone:[self zone]] initWithRootViewController:controller];
    
    navigationController.navigationBarHidden = YES;
    
    [sectionViewControllers addObject:navigationController];
    [navigationController release];
  }
  
  self.viewControllers = sectionViewControllers;
}

- (NSArray*)controllers
{
  if (!_controllers)
    _controllers = [NSArray arrayWithObjects:[self tabController1], [self tabController2], nil];
  return _controllers;
}

这在你的 AppDelegate.m 中:

and this in you AppDelegate.m:

self.window.rootViewController = self.yourUITabBarController;

这篇关于自定义 UITabBarController 和 UINavigationController的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!

The End

相关推荐

硬件音量按钮更改应用程序音量
Hardware Volume buttons change in app volume(硬件音量按钮更改应用程序音量)...
2024-08-12 移动开发问题
10

Cocos2d - 如何检查不同层中对象之间的交集
Cocos2d - How to check for Intersection between objects in different layers(Cocos2d - 如何检查不同层中对象之间的交集)...
2024-08-12 移动开发问题
8

恢复游戏 cocos2d
Resume game cocos2d(恢复游戏 cocos2d)...
2024-08-12 移动开发问题
6

突出显示朗读文本(在 iPhone 的故事书类型应用程序中)
Highlight Read-Along Text (in a storybook type app for iPhone)(突出显示朗读文本(在 iPhone 的故事书类型应用程序中))...
2024-08-12 移动开发问题
9

Cocos2D + 仅禁用 Retina iPad 图形
Cocos2D + Disabling only Retina iPad Graphics(Cocos2D + 仅禁用 Retina iPad 图形)...
2024-08-12 移动开发问题
10

如何将 32 位 PNG 转换为 RGB565?
How to convert 32 bit PNG to RGB565?(如何将 32 位 PNG 转换为 RGB565?)...
2024-08-12 移动开发问题
21