本文介绍了UINavigationController不适用于UITabBarController的moreNavigationController的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我在我的应用程序中处理 UINavigationControllers
,全部由 UITabBarController
处理。一切正常,直到我的控制器进入自动生成的更多选项卡。
I'm dealing with UINavigationControllers
in my application, all handled by an UITabBarController
. Everything works fine until my controllers fall into the automatically generated "More" tab.
我在简单的例子中重现了这个问题。难道我做错了什么?我想不出来。
I reproduced the problem in the simplistic example. Am I doing something wrong? I can't figure out.
感谢您的帮助。
#import <UIKit/UIKit.h>
@interface testAppDelegate : NSObject <UIApplicationDelegate, UITabBarControllerDelegate>
{
UIWindow *window;
UITabBarController *tabBarController;
}
@property (nonatomic, retain) IBOutlet UIWindow *window;
@property (nonatomic, retain) IBOutlet UITabBarController *tabBarController;
@end
@implementation testAppDelegate
@synthesize window, tabBarController;
- (void)applicationDidFinishLaunching:(UIApplication *)application
{
tabBarController = [[UITabBarController alloc] initWithNibName:nil bundle:nil];
UINavigationController *ctrl1 = [[[UINavigationController alloc] initWithNibName:nil bundle: nil] autorelease];
ctrl1.tabBarItem = [[[UITabBarItem alloc] initWithTabBarSystemItem:UITabBarSystemItemFeatured tag:1] autorelease];
UINavigationController *ctrl2 = [[[UINavigationController alloc] initWithNibName:nil bundle: nil] autorelease];
ctrl2.tabBarItem = [[[UITabBarItem alloc] initWithTabBarSystemItem:UITabBarSystemItemFavorites tag:2] autorelease];
UINavigationController *ctrl3 = [[[UINavigationController alloc] initWithNibName:nil bundle: nil] autorelease];
ctrl3.tabBarItem = [[[UITabBarItem alloc] initWithTabBarSystemItem:UITabBarSystemItemBookmarks tag:3] autorelease];
UINavigationController *ctrl4 = [[[UINavigationController alloc] initWithNibName:nil bundle: nil] autorelease];
ctrl4.tabBarItem = [[[UITabBarItem alloc] initWithTabBarSystemItem:UITabBarSystemItemContacts tag:4] autorelease];
// This one won't work
UINavigationController *ctrl5 = [[[UINavigationController alloc] initWithNibName:nil bundle: nil] autorelease];
ctrl5.tabBarItem = [[[UITabBarItem alloc] initWithTabBarSystemItem:UITabBarSystemItemMostRecent tag:5] autorelease];
// This one will work
UIViewController *ctrl6 = [[[UIViewController alloc] initWithNibName:nil bundle: nil] autorelease];
ctrl6.tabBarItem = [[[UITabBarItem alloc] initWithTabBarSystemItem:UITabBarSystemItemDownloads tag:6] autorelease];
tabBarController.viewControllers = [NSArray arrayWithObjects:ctrl1, ctrl2, ctrl3, ctrl4, ctrl5, ctrl6, nil];
[window addSubview:tabBarController.view];
[window makeKeyAndVisible];
}
- (void)dealloc
{
[tabBarController release];
[window release];
[super dealloc];
}
@end
推荐答案
简答:你不能嵌套导航控制器
Short answer: you cannot nest navigation controllers
更长的答案:你做错了。创建所需内容的更好方法是这样的:
Longer answer: you are doing it wrong. A better way to create what you want goes like this:
NSMutableArray *viewControllers = [NSMutableArray array];
[viewControllers addObject:[[[ConverterViewController alloc] init] autorelease]];
[viewControllers addObject:[[[UINavigationController alloc]
initWithRootViewController:[[[CurrencyViewController alloc] init] autorelease]] autorelease]];
[viewControllers addObject:[[[UINavigationController alloc]
initWithRootViewController:[[[HistoryViewController alloc] init] autorelease]] autorelease]];
[viewControllers addObject:[[[UINavigationController alloc]
initWithRootViewController:[[[SetupViewController alloc] init] autorelease]] autorelease]];
[viewControllers addObject:[[[UINavigationController alloc]
initWithRootViewController:[[[HelpViewController alloc] init] autorelease]] autorelease]];
[viewControllers addObject:[[[LinksViewController alloc] init] autorelease]];
self.viewControllers = viewControllers;
self.customizableViewControllers = [viewControllers arrayByRemovingFirstObject];
@implementation HelpViewController
#pragma mark -
#pragma mark Initialization
- (id)init
{
if ((self = [super initWithNibName:@"HelpView" bundle:nil]) != nil) {
self.title = NSLocalizedString(@"Help", @"Help");
self.tabBarItem.image = [UIImage imageNamed:@"question.png"];
}
return self;
}
这篇关于UINavigationController不适用于UITabBarController的moreNavigationController的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!