我开发的iOS5及以上的应用程序,我不使用故事板或IB。 我创建一个自定义UITabBarController
,在我AppDelegate
我在里面我把4个视图控制器只有1 UINavigationController
(不知道为什么)。
这导致了行为,其中我只能从第一个选项卡,这显然是,打包成一个推新VC UINavigationController
称为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的文档。
是的你可以。 尝试这样的事情代码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:
self.window.rootViewController = self.yourUITabBarController;
我是否应为每片单独的UINavigationController
如果你想在每个选项卡浏览, 是你应该添加嵌入navigationController各的viewController。
假设你有一个tabbarController。 现在,你可以在你的tabController添加任何的viewController或任何NavController。 NavController可以包含的viewController。 但是你会困惑,你会用navController或的viewController。 您将使用的viewController,你不需要导航,我的意思是,你并不需要。
下面是一个代码示例,其中第一视图仅包含视图和第二视图包含导航控制器。 你不能在第一个视图推新观点,但你可以很容易地在第二视图推新视图。
-(void)addTabBarControllers
{
UIViewController *viewController1, *viewController2;
viewController1 = [[[HomeView alloc] initWithNibName:@"HomeView" bundle:nil] autorelease];
viewController2 = [[[FloorPlanHome alloc] initWithNibName:@"FloorPlanHome" bundle:nil] autorelease];
UINavigationController *nav2 = [[UINavigationController alloc] initWithRootViewController:viewController2];
self.tabBarController = [[[UITabBarController alloc] init] autorelease];
self.tabBarController.viewControllers = [NSArray arrayWithObjects:viewController1, nav2, nil];
[[self.tabBarController.tabBar.items objectAtIndex:0] setTitle:@"First View"];
[[self.tabBarController.tabBar.items objectAtIndex:1] setTitle:@"Second View"];
[[self.tabBarController.tabBar.items objectAtIndex:0] setImage:[UIImage imageNamed:@"first.png"]];
[[self.tabBarController.tabBar.items objectAtIndex:1] setImage:[UIImage imageNamed:@"second.png"]];
self.window.rootViewController = self.tabBarController;
[self.window makeKeyAndVisible];
}
呼叫从AppDelegate中didFinishLaunchingWithOptions此方法。 这里HomeView和FloorPlanView是两种不同的意见,您首先需要添加这些意见和类文件。
请参考这里我的答案:
问题的UITabBarController
if(!self.tabBarController)
self.tabBarController = [[UITabBarController alloc] init];
self.tabBarController.delegate=self;
NSMutableArray *localcontrollerarray = [[NSMutableArray alloc] initWithCapacity:2];
UIViewController *viewController1 = [[HomeViewController alloc] initWithNibName:@"HomeViewController" bundle:nil];
UINavigationController *navi1 = [[UINavigationController alloc] initWithRootViewController:viewController1];
[localcontrollerarray addObject:navi1];
UIViewController *viewController2 = [[ScanViewController alloc] initWithNibName:@"ScanViewController" bundle:nil];
UINavigationController *navi2 = [[UINavigationController alloc] initWithRootViewController:viewController2];
[localcontrollerarray addObject:navi2];
self.tabBarController.viewControllers = localcontrollerarray;
[self.window addSubview:self.tabBarController.view];