UINavicontroller

导航栏控制器是一种容器试图控制器,与标签栏控制器不同,它用于展示层次化界面。这些层次化界面以树形结构存在,用户通过一层一层深入,最终到达目标界面。利用UINavigationController,可以轻松管理多个控制器,轻松完成控制器之间的切换,典型例子就是系统自带的设置应用。

•UINavigationController的简单使用:添加\移除子控制器
UINavigationController的使用步骤
Ø初始化 UINavigationController
Ø设置 UIWindow的rootViewController为 UINavigationController
Ø根据具体情况,通过push方法添加对应个数的子控制器
UINavigationController以栈的形式保存子控制器

@property(nonatomic,copy) NSArray *viewControllers;

@property(nonatomic,readonly) NSArray *childViewControllers;

•使用push方法能将某个控制器压入栈

-(void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated;

•使用pop方法可以移除控制器
Ø将栈顶的控制器移除

-(UIViewController *)popViewControllerAnimated:(BOOL)animated;

Ø回到指定的子控制器

-(NSArray *)popToViewController:(UIViewController *)viewController animated:(BOOL)animated;

Ø回到根控制器(栈底控制器)

-(NSArray *)popToRootViewControllerAnimated:(BOOL)animated;


二. 具体介绍

1. 通过代码的方式创建UITabBarController界面

代码的位置应该放在xxxAppDelegate.m 中的applicationDidFinishLaunching:方法中,因为Tab Bar Controller通常是为应用窗口提供根视图,所以需要在程序启动后,窗口显示前创建Tab Bar Controller。具体创建步骤为:

(1) 创建一个新的UITabBarController对象

(2) 为每一个Tab创建一个root view controller

(3) 把这些root view controllers添加到一个array中,再把这个array分配给tab bar controller的viewControllers属性

(4) 把tab bar controller's view添加到应用程序主窗口

例子:

- (void)applicationDidFinishLaunching:(UIApplication *)application {

   tabBarController = [[UITabBarController alloc] init];

 

   MyViewController* vc1 = [[MyViewController alloc] init];

   MyOtherViewController* vc2 = [[MyOtherViewController alloc] init];

 

   NSArray* controllers = [NSArray arrayWithObjects:vc1, vc2, nil];

   tabBarController.viewControllers = controllers;

 

   // Add the tab bar controller's current view as a subview of the window

   [window addSubview:tabBarController.view];

}

2. 通过代码的方式创建TabBarItem

Tab Bar Controller的每个选项卡都得有一个UITabBarItem,可以在其root view controller初始化时创建并添加UITabBarItem。

例子:

- (id)init {

   if (self = [super initWithNibName:@"MyViewController" bundle:nil]) {

      self.title = @"My View Controller";

 

      UIImage* anImage = [UIImage imageNamed:@"MyViewControllerImage.png"];

      UITabBarItem* theItem = [[UITabBarItem alloc] initWithTitle:@"Home" image:anImage tag:0];

      self.tabBarItem = theItem;

      [theItem release];

   }

   return self;


}

我有几个控制器
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];可以实现需求,
但工作量太大(很难做)。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值