当前位置:编程学习 > wap >>

iphone用UINavigationController实现在两个页之间导航(下)

续前)
 
第七步:UINavigationItem和UIBarButtonItem
通常每个(指任何)视图控制器都可以定义一个UINavigationItem。UINavigationItem类就是实现这些功能的,这个类包含了如下表:
左边按钮
标题视图
右边按钮
leftBarButtonItem
titleView
rightBarButtonItem
当它所属的视图控制器在导航控制器所控制的堆栈顶部时,即调用(也就是说该视图控制器即将要显示时),系统自动显示该视图控制器的UINavigationItem,开发人员无需编写任何代码来调用UINavigationItem,但之前必须要设置好。上面程序代码中已经有定制好的导航栏左右按钮,简述说明如下:
定制返回按钮:在缺省情况下,下一页上的返回按钮上的文字是上一页的标题,可以在程序中修改为其它文字,要记住!返回按钮是放在上一页的视图控制器上的,所以必须在上一页对应的视图控制器的实现文件(*.m)中去修改。如在上面lvyouAppDelegate.m中有如下代码:(图中绿色代码部分)
[plain] 
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {    
   …… 
    navController = [[UINavigationController alloc] init];//初始化导航控制器 
    //定义名称为“所有城市”的返回按钮。该按钮无需target和action 
//因为系统已经实现了返回功能。Style是显示风格 
    UIBarButtonItem *backButton = 
       [[UIBarButtonItem alloc] initWithTitle:@"所有城市" 
           style:UIBarButtonItemStyleBordered 
           target:nil action:nil]; 
    //设置启动应用时第一个要显示的视图控制器,这里是cityViewContrl 
    cityViewController *cityViewContrl = [[cityViewController alloc] init]; 
    cityViewContrl.title = @"旅游指南";//设置第一个视图控制器的标题 
    //设置返回按钮 
    cityViewContrl.navigationItem.backBarButtonItem= backButton; 
    [backButton release]; 
    //把第一个视图控制器推push到堆栈中 
    [navController pushViewController:cityViewContrl animated:NO]; 
    [cityViewContrl release]; 
    //把导航(标签栏)控制器放到Window下 
    //[window addSubview:navController.view]; 
    [window addSubview:tabBarController.view]; 
    
    // Override point for customization after application launch. 
    [window makeKeyAndVisible]; 
    return YES; 

在导航控制栏上添加系统按钮和左右按钮。
首先在第一页的导航栏上添加一个“折扣信息”按钮,如在上面所述,要记住!返回按钮是放在上一页的视图控制器上的,所以必须在上一页对应的视图控制器的实现文件(*.m)中去修改。这里要求在第一页的导航栏上添加一个“折扣信息”按钮(显然,这不是返回上一页按钮,而是在导航控制栏上添加一个“左按钮”),故可在当前视图控制器的实现文件(*.m)中去修改,即cityViewController.m中去修改,在它原代码中有如下代码:(图中绿色代码部分)

[plain]
- (void)viewDidLoad { 
//创建一个有边框的文体按钮,按下后,调用视图控制器上的discount方法 
UIBarButtonItem *discountButton = [[UIBarButtonItem alloc] 
                  initWithTitle:@"折扣信息" style:UIBarButtonItemStyleBordered 
                            target:self action:@selector(discount:)]; 
    self.navigationItem.leftBarButtonItem = discountButton;//设置为左边按钮 
    [discountButton release];//释放内存 
    
    UITabBarItem *item = [[UITabBarItem alloc] 
                          initWithTitle:@"旅游指南" 
                          //initWithTabBarSystemItem:UITabBarSystemItemBookmarks 
                          image:[UIImage imageNamed:@"GoldenGateBridge.png"] 
                          tag:0]; 
    self.tabBarItem = item; 
    [item release]; 
    
    [super viewDidLoad]; 

其次在第二页的导航栏上添加一个“系统按钮”(右边按钮),根据上面分析,这同样不以至于返回按钮,故可在当前视图控制器的实现文件(*.m)中去修改,即CityDetailViewController.m中去修改,在它原代码中有如下代码:(图中绿色代码部分)
[plain] 
- (void)viewDidLoad { 
    cityName.text = city;//获取从前一个页面传来的数据 
    //创建一个系统添加按钮,按下后,调用视图控制器上的add方法 
    UIBarButtonItem *rightButton = [[UIBarButtonItem alloc] 
       initWithBarButtonSystemItem:UIBarButtonSystemItemAdd 
       target:self action:@selector(add:)];// 调用视图控制器上的add方法 
    //设置为导航控制器控制条上的右边按钮 
self.navigationItem.rightBarButtonItem = rightButton; 
    [rightButton release]; 
    
    [super viewDidLoad]; 

第八步:标签栏控制器(UITabBarController)
标签栏控制器是用数组来管理所控制的视图控制器。这些被管理的视图控制器即可以是导航控制器,也可以是一般的视图控制器。另外,这些视图控制器之间是平等关系,而不像导航控制器所管理的视图控制器之间是所谓的“上下级关系”。缺省情况下,标签栏上显示的是各个视图的标题,如下图显示了五个标签。
iPhone OS的标签栏最多可显示五个标签

当你选择某一个视图控制器时,该视图控制器就执行。当你选择另一个视图控制器时,当前视图控制器的状态被保留。非常类似微软中的多窗口的概念。
关系:               平等关系             上、下级之间关系
标签栏控制器
UITabBarController
导航控制器
(旅游信息)
一般视图控制器
cityViewController
一般视图控制器
CityDetailViewController
一般视图控制器
(美食天地)
MeiShiTianDi
 
下面我们将创建一个标签栏控制器,如上表,它有两个标签“旅游信息”和“美食天地”。“旅游信息”由于前面已经完成,它管理着两个视图控制器(cityViewController、 CityDetailViewController),因此,下面重点讲解未完成的工件。
1、项目的委托AppDelegate声明注册一个标签控制器、初始化后放到主窗口Window下
首先:因为项目名称仍然是lvyou,所以要在项目.h中(lvyouAppDelegate.h)声明一个标签控制器:
[plain]
//lvyouAppDelegate.h原代码开始 
#import <UIKit/UIKit.h> 
@interface lvyouAppDelegate : NSObject <UIApplicationDelegate> { 
    UIWindow *window; 
    UINavigationController *navController;//此行新

补充:移动开发 , IOS ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,