iphone用UINavigationController实现在两个页之间导航(下)
续前)
第七步:UINavigationItem和UIBarButtonItem
通常每个(指任何)视图控制器都可以定义一个UINavigationItem。UINavigationItem类就是实现这些功能的,这个类包含了如下表:
左边按钮
标题视图
右边按钮
leftBarButtonItem
titleView
rightBarButtonItem
当它所属的视图控制器在导航控制器所控制的堆栈顶部时,即调用(也就是说该视图控制器即将要显示时),系统自动显示该视图控制器的UINavigationItem,开发人员无需编写任何代码来调用UINavigationItem,但之前必须要设置好。上面程序代码中已经有定制好的导航栏左右按钮,简述说明如下:
定制返回按钮:在缺省情况下,下一页上的返回按钮上的文字是上一页的标题,可以在程序中修改为其它文字,要记住!返回按钮是放在上一页的视图控制器上的,所以必须在上一页对应的视图控制器的实现文件(*.m)中去修改。如在上面lvyouAppDelegate.m中有如下代码:(图中绿色代码部分)
在导航控制栏上添加系统按钮和左右按钮。首先在第一页的导航栏上添加一个“折扣信息”按钮,如在上面所述,要记住!返回按钮是放在上一页的视图控制器上的,所以必须在上一页对应的视图控制器的实现文件(*.m)中去修改。这里要求在第一页的导航栏上添加一个“折扣信息”按钮(显然,这不是返回上一页按钮,而是在导航控制栏上添加一个“左按钮”),故可在当前视图控制器的实现文件(*.m)中去修改,即cityViewController.m中去修改,在它原代码中有如下代码:(图中绿色代码部分)
*.m)中去修改,即CityDetailViewController.m中去修改,在它原代码中有如下代码:(图中绿色代码部分) 第八步:标签栏控制器(UITabBarController)标签栏控制器是用数组来管理所控制的视图控制器。这些被管理的视图控制器即可以是导航控制器,也可以是一般的视图控制器。另外,这些视图控制器之间是平等关系,而不像导航控制器所管理的视图控制器之间是所谓的“上下级关系”。缺省情况下,标签栏上显示的是各个视图的标题,如下图显示了五个标签。
iPhone OS的标签栏最多可显示五个标签
当你选择某一个视图控制器时,该视图控制器就执行。当你选择另一个视图控制器时,当前视图控制器的状态被保留。非常类似微软中的多窗口的概念。
关系:
平等关系 上、下级之间关系 标签栏控制器
UITabBarController
导航控制器
(旅游信息)
一般视图控制器
cityViewController
一般视图控制器
CityDetailViewController
一般视图控制器
(美食天地)
MeiShiTianDi
下面我们将创建一个标签栏控制器,如上表,它有两个标签“旅游信息”和“美食天地”。“旅游信息”由于前面已经完成,它管理着两个视图控制器(cityViewController、 CityDetailViewController
),因此,下面重点讲解未完成的工件。 1、项目的委托AppDelegate声明注册一个标签控制器、初始化后放到主窗口Window下
首先:因为项目名称仍然是lvyou,所以要在项目.h中(lvyouAppDelegate.h)声明一个标签控制器:
2、创建另一个(第三个)视图控制器——美食天地:MeiShiTianDi方法同前:
>>请选择File > New File。在New File窗口中,请选择Cocoa Touch Classes,然后选择UIViewController-subclass。同时,请勾选Options区域中标题为With XIB for user interface的选择框。为文件起个名字,视图控制器名称为MeiShiTianDi。此时,系统已经生成三个文件(*.h、*.m、*.xib),在新的视图控制器的视图上(MeiShiTianDi.xib)添加一些按钮(加四个,命名为“广东菜、浙江菜、四川菜、东北菜”)。
1)、添加标签栏控制器的属性到lvyouAppDelegate.h中——(上一步已经完成!)
2)、在lvyouAppDelegate.m文件中的- (BOOL)application:(UIApplication *)applicationdidFinishLaunchingWithOp
tions:(NSDictionary *)launchOptions 方法中,用代码方式创建一个标签栏控制器,并初始化它,最后将两个控制器navController(旅游信息)、viewController(美食天地)放在标签控制器上。——(上一步已经完成!)3)、设置视图控制器在标签栏上的标题和图像(UITabBarItem)每个视图控制器类都有一个UITabBarItem。通过这个类,可以设置视图控制器在标签栏上的标题和图像。标题和图像分为两个类,一类是自己的图像和文字(格式为.png);另一类是系统提供的图像和文字。
首先添加图像到项目中,(在资源文件夹下)
添加UITabBarItem代码到cityViewController.m的viewDidLoad方法下,这里使用用户自己的图像,图像名是:GoldenGateBridge.png
添加UITabBarItem代码到MeiShiTianDi.m的viewDidLoad方法下,这里使用系统提供的图像,图像名是:UITabBarSystemItemBookmarks,当然,本例还注释掉了使用用户自己的图像的两行代码。如果你交换一下,也能运行。 - (void)viewDidLoad { //UIImage *tabImage = [UIImage imageNamed:@"shrimp.jpg"]; //设置视图控制器在标签栏上的标题和图像 // 文字是:美食天地。图像是:UITabBarSystemItemBookmarksUITabBarItem *item = [[UITabBarItem alloc] initWithTitle:@"美食天地" initWithTabBarSystemItem:UITabBarSystemItemBookmarks //image:tabImage tag:0];//本例还注释掉了使用用户自己的图像shrimp.jpg的两行代码。如你交换一下也能运行self.tabBarItem = item; [item release]; [super viewDidLoad];}