iPhone UIKit详解
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

3.3 UITabBarController的使用技巧

3.3.1 UITabBar的参照

管理标签条的UITabBar类的实例,可以通过UITabBarController的tabBar属性取得。UITabBar的items属性中以NSArray形式保存管理的标签条项目,当前选中的标签(显示的画面)的索引保存在selectedItem属性中。

另外,UITabBarController管理下的各UIViewController的tabBarItem属性(注意UITabBarItem实例中UITabBarItem为UIBarItem的子类,与UIView间没有继承关系)也会自动追加到UITabBar的items属性中。

3.3.2 系统图标的使用

可以使用UIKit中提供的系统标签项目作为标签条的项目。针对特定的功能(或画面),系统标签项目提供与此功能相匹配的图标图片以及标题的组合。这样不仅能简单地设置标签项目,而且因为使用了这些用户已经习惯的标签项目,将方便用户更直观地操作,应用程序的界面也将更加人性化。

通过在UITabBarItem初始化时调用initWithTabBarSystemItem:tag:方法来设置系统标签项目。实例代码如下。

// self为UITabBarController中设置的UIViewController的子类实例
self.tarBarItem = [[[UITabBarItem alloc] initWithTabBarSystemItem:U ITabBarSystemItemFeatured tag:0] autorelease];

如上述代码中所示,通过在initWithTabBarSystemItem:tag:方法的第一个参数中指定UITabBarSystemItem类型的常量来设置各种系统标签项目。不需要tag的话可将其设置成0。这样就将创建的 UITabBarItem实例设置到UITabBarController中追加的各画面的tabBarItem属性中了。上述方法第一个参数中可指定的常量以及实际显示的图标列表如表3-1所示。

表3-1 系统标签项目列表

3.3.3 自定义图标的使用

上一小节介绍了如何向标签条中设置系统标签项目的方法。正如第3.2.1节中介绍的一样,程序员还可以设置自定义图标。这时在初始化UITabBarItem时需要使用initWithTitle:image:tag:方法。其中第一个参数中设置标签条中显示的标题,image中指定使用的图标图片(UIImage)。以下是具体的实例代码。

// 导入图标图片
UIImage* icon = [UIImage imageNamed:@"ball1.png"];
// 指定标题与图标图片后设置UITabBarItem
self.tabBarItem =
         [[[UITabBarItem alloc] initWithTitle:@"Hello" image:icon tag:0] autorelease];

有一点需要特别注意,向image传递的图标图片有些特殊要求。此图标图片中需要同时存在透明色以及非透明色。在标签条中显示的图标,单色的非透明色将被完全覆盖,如图3-11所示。正确的表述是,将按照图标图片的透明度(A值)来创建显示的图标。

图3-11 标签条的图标图片处理示意图

表3-2是标签条图片在不同状态下的显示示例。

表3-2 标签图标的色彩配置

3.3.4 向标签条中追加6个以上的画面

大家可能已经注意到了,在标签条上最多只能显示5个图标。如果需要设置6个以上的画面的情况下,会出现什么情况呢?实际上表3-1中的UITabBarSystemItemMore图标正是为出现此种情况而准备的。当向UITabBarController中设置10个画面时,将显示如图3-12所示的画面。

图3-12 向UITabBarController中设置6个以上画面时

此时,标签条的第5个图标将自动变成“更多”,当单击“更多”图标后,将在新画面中显示剩下的没有显示出来的图标。当单击画面右上方的“编辑”按钮后,还可以通过拖曳来改变图标的显示顺序,如图3-13所示。

图3-13 改变图标的显示顺序

UIKit提供了如上所述编辑功能,如果不想使用此编辑功能,可以通过将UITabBarController的customizableViewControllers属性设置为nil来屏蔽此编辑功能。

上述customizableViewControllers属性中原本保存着匹配图标顺序的各画面实例组成的数组。默认设置了所有的画面。例如,通过编辑customizableViewControllers属性,可实现复杂的带条件的画面显示定制顺序。

// 设置了scene1~scene7的7个画面
// 此时,事先将标签条中显示的三个画面固定下来
// 但是,第4个画面(scene4)将来有可能被其他任意画面取代
self.CustomizableViewControllers =
   [NSArray arrayWithObjects:scene4,scene5,scene6,scene6,nil];

3.3.5 标签条图标上的标记

此节介绍关于标签条项目的最后一项知识。iPhone手机中经常会显示如图3-14所示的效果,就是通常被称为“标示(badge)”的图形。可以通过设置UITabBarItem的badgeValue属性来简单地实现标示效果。其代码如下。

图3-14 标签条图标上的标示

// 首先创建标签条图标的实例
UITabBarItem*baritem = [[UITabBarItem alloc] initWithTabBarSyste mItem:UITabBarSystemItemMostViewed tag:0];
// 设置badgeValue中显示的数字
baritem.badgeValue = @"1";
self.tabBarItem = baritem;
[baritem release];