读书频道 > 移动开发 > ios开发 > 20天搞定iPhone软件开发
14.3.2 使用UITabBarController实现并列画面跳转
2012-10-31 09:47:45     我来说两句 
收藏    我要投稿   

本文所属图书 > 20天搞定iPhone软件开发

本书是为有一定其他语言编程经验的程序员转向iOS软件开发而撰写的速成教材。全书一共20讲,一天完成1讲的学习。本着循序渐进的原则,前面的10讲偏重于Cocoa面向对象编程的基本概念以及Objective-C 2.0语言的语法...  立即去当当网订购

14.3.1节介绍了由UIViewController实现的画面切换。实际上并非真地实现了两个画面间的跳转,而是同时启动两个画面,控制其中哪一个画面显示在前台,哪一个画面显示在后台而已。这种画面跳转方式有一个很大的缺点,当画面数量增加时,画面跳转的实现代码将越来越复杂,而且各个画面间不可避免地有相互依赖关系。

实际上,在UIKit中提供了专用的管理画面跳转的类,这就是UITabBarController类以及UINavigationController类。本节首先介绍使用UITabBarController类如何实现画面间的跳转功能。

下面我们以14.3.1节实例代码为基础,将其改造成使用UITabBarController类来实现画面间的跳转。首先将HelloWorldAppDelegate改名为MultiViewAppDelegate,并进行了如下修改(代码中粗体字部分)。

[MultiViewAppDelegate.h]
#import < UIK it/UIK it.h >
@i nterfac e MultiViewAppDelegate : NSObject < UI application D ele g ate> {
    UIWindow *window;
    UI View Controller *rootController;
}
@property (nonatomic, retain)  UIWindow *window;
@end
[MultiViewAppDelegate.m]
#import "MultiViewAppDelegate.h"
#import "View Controller1.h"
#import "View Controller2.h"
@implementation MultiViewAppDelegate
@sy nt h esize window;
# pragma mark -
# pragma mark application lifecycle
-  (BOOL)application:(UIapplication  *)application  didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
  //初始化window 实例变量
  CG R e c t frame = [[UIScreenmainScreen] bounds];
  self.window = [[UIWindowalloc] initWith frame:frame];
  //创建母体Controller实例
  rootController = [[UItabBarControlleralloc] init];
 
  //创建画面1与画面2的Controller实例
  View Controller1 *tab1 = [[[View Controller1 alloc] i nit] autorelease];
  View Controller2 *tab2 = [[[View Controller2 alloc] i nit] autorelease];
  //将画面1、2的Controller实例以数组的形式追加到母体Controller中
  NSA r ray *tabs = [NSA r ray a r ray Wit h O bje c ts:tab1,tab2,n il];
  [(UITabBarController)rootController setViewControllers:tabs animated:NO];
 
  //将母体Controller的v ie w 追加到Wi n d o w中
  [self.window ad d Su bView: rootController.v ie w];
  [self.window m a k e KeyA n d Visi ble];
  r etu r n Y ES;
}
- (v oid)d ealloc {
    [rootController release];
    [window release];
    [superdealloc];
}
@end

要修改的地方并不多。首先删除前例中单独创建两个画面的实例变量:viewController以及viewCon2,取而代之的是UITabBarController类型的实例变量rootController。上例中将两个画面的view直接追加到window中,本例中只需要将UITabBarController类型实例变量的view追加到window中。而将两个画面的UIViewController对象以数组的形式追加到UITabBarController类型的实例变量中,此时调用了setViewControllers: animated:方法,此方法的第一个参数即为UIViewController对象数组。

接着,我们开始修改两个画面的实现代码。其实施步骤如下。

(1)按钮去掉,删除与按钮相关的代码。

(2)重写(或称覆盖)init方法,其中追加与标签相关的代码。

两个画面中的init方法的代码如下。

[View Controller1.m]
- (id)init {
  if ( (self = [superinit]) ) {
    // 设置tab B a r的相关属性
    self.t it le = @"Hello";
    UIImage* ic o n = [UIImageimageName d:@"ball1.png"];
    self.tab B a rIte m =
      [[[UITabBarItem alloc] initWithTitle:@"Hello" image:icon tag:0] autorelease];
  }
  returnself;
}
[View Controller2.m]
- (id)init {
  if ( (self = [superinit]) ) {
    // 设置tab B a r的相关属性
    self.t it le = @"您好";
    UIImage* ic o n = [UIImageimageNamed:@"ball2.png"];
    self.tab B a rIte m =
      [[[UITabBarItem alloc] initWithTitle:@"您好" image:icon tag:0] autorelease];
  }
  returnself;
}

重写的init方法中也没有追加多少内容。设置的title属性后,导入图标用的图片,并将其设置到UIViewController的 tabBarItem属性中。调用 initWithTitle: image: tag:方法进行UITabBarItem类的初始化。第一个参数为标签条中显示的标题;第二
个参数处指定显示的图标图片;第三个参数为标签的序号,此序号通常用于程序内检索。

执行这个经过改造的工程后,将显示如图14-3所示结果。

  
 

点击复制链接 与好友分享!回本站首页
分享到: 更多
您对本文章有什么意见或着疑问吗?请到论坛讨论您的关注和建议是我们前行的参考和动力  
上一篇:14.3.1 使用UIViewController实现简单的画面切换
下一篇:14.3.3 使用UINavigationController实现多层画面跳转
相关文章
图文推荐
1.3.5 有限的屏幕尺
1.2 必备条件
精通iOS开发 : 第7版
3.5 iFunBox
排行
热门
文章
下载
读书

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训
版权所有: 红黑联盟--致力于做最好的IT技术学习网站