读书频道 > 网站 > 网页设计 > iPhone UIKit详解
3.2.1 使用UITabBarController实现并列画面跳转
12-09-15    奋斗的小年轻
收藏    我要投稿   

本文所属图书 > iPhone UIKit详解

UIKit框架是iPhone应用程序开发中最基本的框架,也是用得最多、最重要的框架。本书就是一本UIKit开发大全,包括UIKit框架中各种类、控件使用技巧的相关介绍。本书每个章节都配有详细的应用实例,方便读者对UIKit...立即去当当网订购

3.2  画面跳转

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

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

下面我们以上一节实例代码为基础,将其改造成使用UITabBarController类来实现画面间的跳转。首先将HelloWorldAppDelegate 改名为MultiViewAppDelegate,并进行如下修改(代码中粗体字部分)。
[M u lt iVie wA p pD ele g ate.h]
#i m p ort < UIK it/UIK it.h >
@interface MultiViewAppD elegate : NSObject <UIApplicationD elegate> {
    UIWin d o w *w in d o w;
     UI Vie w Cont roller *ro otCont roller;
}
@pro p erty (n on atom ic, r etain)  UIWin d o w *w in d o w;
@e n d
[M u lt iVie wA p pD ele g ate.m]
#i m p ort "M u lt iVie wA p pD ele g ate.h"
#i m p ort "Vie w Cont roller1.h"#i m p ort "Vie w Cont roller2.h"
@i m ple m e ntat ion M u lt iVie wA p pD ele g ate
@sy nt hesize w in d o w;
# prag ma ma rk -# prag ma ma rk A p plic at ion life c ycle
-  (B O OL)a p plic at ion:(UI A p plic at ion  *)a p plic at ion  d id Fin ish L au nc h in
g Wit h O pt ions:(NSDic t ion a ry *)lau nc h O pt ions {   
  // 初始化w in d o w 实例变量
  CG R e c t fra m e = [[UIScr ee n mainScr ee n] b ou n d s];
  s elf.w in d o w = [[UIWin d o w allo c] in itWit h Fra m e:fra m e];
  // 创建母体Cont roller实例
  ro otCont roller = [[UITa b B a r Cont rollerallo c] in it];
 
  // 创建画面1与画面2的Cont roller实例
  V ie w C on t ro l l e r 1   * ta b 1   =   [[[ V ie w C on t ro l l e r 1   al l o c ]   in i t]
autor ele a s e];
  V ie w C on t ro l l e r 2   * ta b 2   =   [[[ V ie w C on t ro l l e r 2   al l o c ]   in i t]
autor ele a s e];
  // 将画面1、画面2的Cont roller实例以数组的形式追加到母体Cont roller中
  NSA r ray *ta b s = [NSA r ray a r ray Wit h O bje c ts:ta b1,ta b2,n il];
  [( U I ta b B a r C on t ro l l e r)ro o t C on t ro l l e r   s e t V ie w C on t ro l l e r s:ta b s
a n i mate d:NO];
 
  // 将母体Cont roller的v ie w 追加到Win d o w中
  [s elf.w in d o w ad d Su bVie w: ro otCont roller.v ie w];
    [s elf.w in d o w ma k e KeyA n d Visi ble];
r etu r n Y ES;
}
- (v oid)d e allo c {
    [ro otCont roller r ele a s e];
    [w in d o w r ele a s e];
    [s u p er d e allo c];
}
@e n d

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

接着,我们开始修改两个画面的实例代码。其实施方法如下。

● 按钮去掉,删除与按钮相关的代码。

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

两个画面中的init方法的代码如下。
[Vie w Cont roller1.m]
- (id)in it {
  if ((s elf = [s u p er in it])) {
    // 设置ta b B a r的相关属性
    s elf.t it le = @"Hello";
    UII mag e*ic on = [UII mag e i mag e Na m e d:@"b all1.p n g"];
    s elf.ta b B a rIte m =
            [[[U Ita b B a rIt e m   al lo c]   in it Wit h Tit le:@"he l lo"   i ma g e:ic on
tag:0] autor ele a s e];
  }
  r etu r ns elf;
}
[Vie w Cont roller2.m]
- (id)in it {
  if ((s elf = [s u p er in it])) {
    // 设置ta b B a r的相关属性
    s elf.t it le = @"您好";
    UII mag e*ic on = [UII mag e i mag e Na m e d:@"b all2.p n g"];
    s elf.ta b B a rIte m =
            [[[UITa b B a rIte m  allo c]  in itWit hTit le:@"您好"  i mag e:ic on  tag:0]
autor ele a s e];
  }
  r etu r ns elf;
}

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

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



 

点击复制链接 与好友分享!回本站首页
分享到: 更多
您对本文章有什么意见或着疑问吗?请到论坛讨论您的关注和建议是我们前行的参考和动力  
上一篇:1.3 功能
下一篇:1.5 小结
相关文章
图文推荐
JavaScript网页动画设
1.9 响应式
1.8 登陆页式
1.7 主题式
排行
热门
文章
下载
读书

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