我有一个带有几个笔尖的TabBar应用程序,大多数都带有一个NavBar。除了tabBar的“更多”部分中的“视图”外,它的效果非常好。
正如预期的那样,它会将一个NavBar返回到“更多”列表,以及我放置在笔尖中的NavBar。
我试图从moreNavigationBar中删除视图控制器并将顶部控制器从我的nib的navBar中删除,但是我从某处获得了额外的视图:
- (void)viewDidLoad {
TestAppDelegate *appDelegate = [[UIApplication sharedApplication] delegate];
UITabBarController *ctrl = appDelegate.rootController;
UINavigationController *navCtrl = ctrl.moreNavigationController;
[navCtrl popToRootViewControllerAnimated: NO];
[navCtrl pushViewController: navController.topViewController animated: YES];
navController = navCtrl;
[super viewDidLoad];
}
我的AppDelegate:
@interface TestAppDelegate : NSObject <UIApplicationDelegate> {
UIWindow *window;
UITabBarController *rootController;
}
@property (nonatomic, retain) IBOutlet UIWindow *window;
@property (nonatomic, retain) IBOutlet UITabBarController *rootController;
MainWindow笔尖是带有TabBarController的基于Window的项目的笔尖,链接到我的app委托中的rootController。
其他的nib有一个view + navigationController,我有一个UITableViewController子类作为我的Root View Controller。
如果我可以让它工作,它仍然不能解决我的问题,因为我想允许用户将它放在tabBar中的任何位置,所以,我必须知道是否有导航栏。
所以,我的问题是,你怎么知道是否有一个navigationBar(在这种情况下,如果显示tabBar的navigationBar),如果是的话,如何让我的navigationController“成为”tabBar的navigationController? / p>
或者,如果您对如何解决此问题有另一个想法,我也将不胜感激:)
答案 0 :(得分:1)
来自apple的建议是你有TabBar控制器包含导航控制器,而不是相反。我有一个或多或少像这样的设置,我有更多标签持有一个导航控制器,基本上是这样的:
@interface SomethingNavViewController : UIViewController { UIView* aview; UINavigationController *navigationController; } @property (nonatomic, retain) IBOutlet UIView *aview; @property (nonatomic, retain) IBOutlet UINavigationController *navigationController; @end
在NIB中,我在更多面板的视图中有一个单独的Nav控制器,我没有用导航控制器视图替换标签栏项目的视图,我刚刚在视图中添加了一个Nav控制器。 / p>
在我的实施文件中,我有:
- (void)viewDidLoad { [super viewDidLoad]; [[self view] addSubview:[navigationController view]]; SomeOtherController *aController = [[[SomeOtherController alloc ] initWithNibName:@"SomeOtherController" bundle:nil ] autorelease]; aController.title = @"Artwalks"; // lots of application logic here. [self.navigationController pushViewController:aController animated:YES]; [self.navigationController setDelegate:self]; }
关于这一点的一个关键是我已经实现了navigationController的委托方法,当你只是插入导航控制器时这非常方便。我发现当我没有这样做时,我的观点没有得到viewDidAppear消息,所以我实现了协议并添加了这个方法:
- (void)navigationController:(UINavigationController *)navigationController didShowViewController:(UIViewController *)viewController animated:(BOOL)animated { if ([viewController respondsToSelector:@selector(viewDidAppear:)]) { [viewController viewDidAppear:animated]; } }
这解决了我各种挥之不去的问题。
无论如何,我希望这个答案能为您提供所需的细节。如果没有,请提供有关您的问题的更多详细信息。我不太确定是什么,但我从某个地方得到了额外的视图,但这听起来像我在找到这个解决方案之前遇到的事情。