导航栏控制器是一种容器试图控制器,与标签栏控制器不同,它用于展示层次化界面。这些层次化界面以树形结构存在,用户通过一层一层深入,最终到达目标界面。利用UINavigationController,可以轻松管理多个控制器,轻松完成控制器之间的切换,典型例子就是系统自带的设置应用。
@property(nonatomic,copy) NSArray *viewControllers;
@property(nonatomic,readonly) NSArray *childViewControllers;
-(void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated;
-(UIViewController *)popViewControllerAnimated:(BOOL)animated;
-(NSArray *)popToViewController:(UIViewController *)viewController animated:(BOOL)animated;
-(NSArray *)popToRootViewControllerAnimated:(BOOL)animated;
二. 具体介绍
1. 通过代码的方式创建UITabBarController界面
代码的位置应该放在xxxAppDelegate.m 中的applicationDidFinishLaun
(1) 创建一个新的UITabBarController对象
(2) 为每一个Tab创建一个root view controller
(3) 把这些root view controllers添加到一个array中,再把这个array分配给tab bar controller的viewControllers属性
(4) 把tab bar controller's view添加到应用程序主窗口
例子:
- (void)applicationDidFinishLaun
}
2. 通过代码的方式创建TabBarItem
Tab Bar Controller的每个选项卡都得有一个UITabBarItem,可以在其root view controller初始化时创建并添加UITabBarItem。
例子:
- (id)init {
}
MyRootViewController
AViewController.h
BViewController.h
CViewController.h
。。。
PViewController.h
MyRootViewController 为UINavigationController 的 RootViewController
UINavigationController为windo的 RootViewController
打开应用默认进入 MyRootViewController
然后通过点击按钮AButton使用方法
[self presentModalViewController:AViewController, animated:YES] 进入AViewController
或者使用方法
[navigationControoler pushViewController: AViewController animated:YES]; 进入 AViewController
再用同样的方法 AViewController去 p resentModalViewController b,或 navigationControoler pushViewController b
然后c。。。。。
问题:
现在我想不管前面的a,b,c的关系是怎样、也不用管有多少个控制器在window中。需要显示 PViewController.h
已经试过的方法
1。在window中addsubview PViewController.view,这个可以实现需求,但在ios6中 PViewController无法实现旋转。
2。用[navigationController pushViewController: PViewController animated:YES];只要a,b,c全是push的就可以, 但如果其中a,b,c中有一个是通过
[ xxx presentModalViewController:xx, animated:YES] 进入的, PViewController不会显示(在那个modalviewcontroller的下面)。
[navigationController p resentModalViewController : PViewController animated:YES];同样不行。
3。用代码找到当前最上层的controller,然后再用这个controller p resentModalViewController: PViewController animated:YES];可以实现需求,
但工作量太大(很难做)。