iOS开发进阶程序员iOS

iOSApp导航层级的设计

2016-01-10  本文已影响332人  __Null

打开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等信息,需要在

self.tabBarController.title = @“主页”;
self.tabBarController.navigationItem.leftBarButtonItem = ;
self.tabBarController.navigationItem.rightBarButtonItem = ;

进行设置。

上一篇下一篇

猜你喜欢

热点阅读