现在的位置: 首页 > 综合 > 正文

定制导航栏的返回按钮(2)

2013年10月01日 ⁄ 综合 ⁄ 共 3433字 ⁄ 字号 评论关闭

用UINavigationController实现在两个页之间导航(下)——书第七章 P143

 

(续前)

 

第七步:UINavigationItemUIBarButtonItem

通常每个(指任何)视图控制器都可以定义一个UINavigationItemUINavigationItem类就是实现这些功能的,这个类包含了如下表:

左边按钮

标题视图

右边按钮

leftBarButtonItem

titleView

rightBarButtonItem

当它所属的视图控制器在导航控制器所控制的堆栈顶部时,即调用(也就是说该视图控制器即将要显示时),系统自动显示该视图控制器的UINavigationItem,开发人员无需编写任何代码来调用UINavigationItem,但之前必须要设置好。上面程序代码中已经有定制好的导航栏左右按钮,简述说明如下:

定制返回按钮:在缺省情况下,下一页上的返回按钮上的文字是上一页的标题,可以在程序中修改为其它文字,要记住!返回按钮是放在上一页的视图控制器上的,所以必须在上一页对应的视图控制器的实现文件(*.m)中去修改。如在上面lvyouAppDelegate.m中有如下代码:(图中绿色代码部分)

- (BOOL)application :( UIApplication *)application didFinishLaunchingWithOptions :( NSDictionary *)launchOptions {   

   ……

    navController =
[[UINavigationController alloc] init];
//初始化导航控制器

    //定义名称为“所有城市”的返回按钮。该按钮无需targetaction

//因为系统已经实现了返回功能。Style是显示风格

    UIBarButtonItem *backButton =

       [[UIBarButtonItem allocinitWithTitle:@"所有城市"

           style:UIBarButtonItemStyleBordered

           target:nil action:nil];

    //设置启动应用时第一个要显示的视图控制器,这里是cityViewContrl

    cityViewController *cityViewContrl =
[[cityViewController alloc] init];

    cityViewContrl.title = @"旅游指南";//设置第一个视图控制器的标题

    //设置返回按钮

    cityViewContrl.navigationItem.backBarButtonItembackButton;

    [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中去修改,在它原代码中有如下代码:(图中绿色代码部分)

- (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中去修改,在它原代码中有如下代码:(图中绿色代码部分)

- (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的标签栏最多可显示五个标签

iPhone开发学习笔记016鈥斺斢肬INavigationController实现在两个页之间导航(下)

当你选择某一个视图控制器时,该视图控制器就执行。当你选择另一个视图控制器时,当前视图控制器的状态被保留。非常类似微软中的多窗口的概念。

关系:               平等关系             上、下级之间关系

标签栏控制器

UITabBarController

导航控制器

(旅游信息)

一般视图控制器

cityViewController

一般视图控制器

CityDetailViewController

一般视图控制器

(美食天地)

MeiShiTianDi

抱歉!评论已关闭.