打开AppStore
,各种类型App
琳琅满目。我们最常用的导航就是标签栏导航了。今天所介绍的是在标签栏导航中,如何在整个UIApplication
中使用一个UINavigationController
的实例。
我们通常的做法就是在
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
方法中,初始化N
个UIViewController
,N
个UINavigationController
,1个UITabBarController
。用UIViewController
的实例初始化UINavigationController
,得到的N
个UINavigationController
的实例再添加到UITabBarController
的viewControllers
中,UITabBarController
的实例作为self.window.rootViewController
。这样UITabBarController
的viewControllers
中的每一个UIViewController
都会拥有一个UINavigationController
的实例,但是每个UIViewController
都会拥有一个UINavigationController
的实例并不是同一个。
如果你想一个UIApplication
只拥有一个UINavigationController
的实例,该如何做到呢?
UIViewController *VC1 = [[UIViewController alloc] init];
VC1.tabBarItem = [[UITabBarItem alloc] initWithTabBarSystemItem:UITabBarSystemItemBookmarks tag:1]];
UIViewController *VC2 = [[UIViewController alloc] init];
VC2.tabBarItem = [[UITabBarItem alloc] initWithTabBarSystemItem:UITabBarSystemItemHistory tag:2]];
UIViewController *VC3 = [[UIViewController alloc] init];
VC3.tabBarItem = [[UITabBarItem alloc] initWithTabBarSystemItem:UITabBarSystemItemFavorites tag:3]];
UITabBarController *tabViewController = [[UITabBarController alloc] init];
tabViewController.viewControllers = @[VC1, VC2, VC3];
UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:tabViewController];
self.window.rootViewController = navigationController;
这样就保证了tabViewController.viewControllers中viewController
拥有同一个navigationController
。
但是需要注意如果要在VC1
, VC2
, VC3
中设置title
,navigationItem.leftBarButtonItem
,navigationItem.rightBarButtonItem
等信息,需要在- (void)viewWillAppear:(BOOL)animated;
或者- (void)viewDidAppear:(BOOL)animated;
方法中调用
self.tabBarController.title = @“主页”;
self.tabBarController.navigationItem.leftBarButtonItem = ;
self.tabBarController.navigationItem.rightBarButtonItem = ;
进行设置。