读书频道 > 网站 > 网页设计 > iPhone UIKit详解
3.1.2 UIViewController的切换
12-09-15    奋斗的小年轻
收藏    我要投稿   

本文所属图书 > iPhone UIKit详解

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

本节我们实际使用UIViewController来创建画面。以第1章“Hello World!”实例为基础,我们再创建一个新的画面上面显示中文“您好、世界!”,并在这两个画面间实现自由切换。

不过大家需要注意的是,这里实现的画面跳转(或称切换)方法并非最佳的跳转方法,目的不过是让读者了解UIViewController管理画面的方式,理解以UIViewController为单位切换画面的样子,如图3-1所示。

本实例中有两个画面,第一个画面中显示“Hello,World!”,背景为白色,下方布置有一个“画面跳转”按钮。第二个画面中显示“您好、世界!”,背景为黑色,下方也布置有一个“画面跳转”按钮。当触摸“画面跳转”按钮时,可在两个画面间进行显示切换。两个画面的代码如下。
[Vie w Co nt r oller1.h]
#i m p or t < UIK it/UIK it.h >
@i nterfac e Vie w Co nt r oller1 : UI Vie w Co nt r oller
@e n d
[Vie w Co nt r oller1.m]
#i m p or t "Vie w Co nt r oller1.h"
@i m ple m e nt at io n Vie w Co nt r oller1
- (v oid)v ie wDid L o ad {
  [s u p er v ie wDid L o ad];
  // 追加“Hello, w orld!”标签
  // 背景为白色、文字为黑色
    U I L a b e l*   l a b e l   =   [[[ U I L a b e l   a l l o c]   i n it W it h F r a m e:s e l f.v i e w.
b ou n d s] autor ele a s e];
  la b el.te x t = @"Hello, w orld!";
  la b el.te x t A lig n m e nt = UITe x t A lig n m e ntC e nter;
  la b el.b ackg r ou n d Color = [UIColor w h ite Color];
  la b el.te x tColor = [UIColor black Color];
    la b el.autor esizi n g M a sk  =  UI Vie wAutor esizi n gFle x i bleWidt h  |  UI Vie
wAutor esizi n gFle x i ble Heig ht;
  [s elf.v ie w ad d Su b v ie w:la b el];
// 追加按钮
  // 单击按钮后跳转到其他画面
  UIButton* button = [UIButton buttonWithTy pe:UIButtonTy peRounded Rect];
  [b utto n s etTit le:@"画面跳转" forSt ate:UICo nt r olSt ate Nor m a l];
  [b utto n sizeToFit];
  CGPoi nt n e wPoi nt = s elf.v ie w.c e nter;
  n e wPoi nt.y += 50;
  b utto n.c e nter = n e wPoi nt;
  b utto n.autor esizi n g M a sk =
        UI Vie wAutor esizi n gFle x i bleTo p M a r gi n  |  UI Vie wAutor esizi n gFle x i b
le B otto m M a r gi n;
  [b utto n ad dTa r g et:s elf
              ac t io n:@s ele c tor(b utto n Did P u sh)
   for Co nt r ol E v e nts:UICo nt r ol E v e ntTouc hU pIn sid e];
  [s elf.v ie w ad d Su b v ie w:b utto n];
}
- (v oid)b utto n Did P u sh {
  // 自己移向背面
  // 结果是Vie w Co nt r oller2显示在前
  [s elf.v ie w.w i n d o w s e n d Su b v ie w ToB ack:s elf.v ie w];
}
@e n d
[Vie w Co nt r oller2.h]
#i m p or t < UIK it/UIK it.h >
@i nterfac e Vie w Co nt r oller2 : UI Vie w Co nt r oller
@e n d
[Vie w Co nt r oller2.m]#i m p or t "Vie w Co nt r oller2.h"
@i m ple m e nt at io n Vie w Co nt r oller2
- (v oid)v ie wDid L o ad {
  [s u p er v ie wDid L o ad];
  // 追加“您好、世界!”标签
  // 背景为黑色、文字为白色
    U I L a b e l*   l a b e l   =   [[[ U I L a b e l   a l l o c]   i n it W it h F r a m e:s e l f.v i e w.
b ou n d s] autor ele a s e];
  la b el.te x t = @"您好、世界!";
  la b el.te x t A lig n m e nt = UITe x t A lig n m e ntC e nter;
  la b el.b ackg r ou n d Color = [UIColor black Color];
  la b el.te x tColor = [UIColor w h ite Color];
    la b el.autor esizi n g M a sk  =  UI Vie wAutor esizi n gFle x i bleWidt h  |  UI Vie
wAutor esizi n gFle x i ble Heig ht;
  [s elf.v ie w ad d Su b v ie w:la b el];
  // 追加按钮
  // 单击按钮后画面跳转
  UIButton* button = [UIButton buttonWithTy pe:UIButtonTy peRounded Rect];
  [b utto n s etTit le:@"画面跳转" forSt ate:UICo nt r olSt ate Nor m a l];
  [b utto n sizeToFit];
  CGPoi nt n e wPoi nt = s elf.v ie w.c e nter;
  n e wPoi nt.y += 50;
  b utto n.c e nter = n e wPoi nt;
  b utto n.autor esizi n g M a sk =
        UI Vie wAutor e sizi n gFle x i bleTo p M a r gi n  |  UI Vie wAutor esizi n gFle x i b
le B otto m M a r gi n;
  [b utto n ad dTa r g et:s elf
             ac t io n:@s ele c tor(b utto n Did P u sh)
for Co nt r ol E v e nts:UICo nt r ol E v e ntTouc hU pIn sid e];
  [s elf.v ie w ad d Su b v ie w:b utto n];
}
- (v oid)b utto n Did P u sh {
  // 自己移向背面
  // 结果是Vie w Co nt r oller1显示在前
  [s elf.v ie w.w i n d o w s e n d Su b v ie w ToB ack:s elf.v ie w];
}
@e n d

ViewController1与ViewController2都是继承UIViewController的子类。为了追加画面控件(UIView及其子类)需要重写(Overwrite)viewDidLoad方法,其中分别创建标签与按钮,并通过addSubview:方法追加到画面(self.view)中。 viewDidLoad方法在UIViewController拥有的UIView(画面基础UIView)被导入后调用。此UIView可通过UIViewController的view属性 参照,控件追加到画面中的代码如下所示。

[s elf.v ie w ad d Su b v ie w:控件实例];

另一个重要的知识是,触摸按钮后实现画面切换。首先调用addTarget:  action: forControlEvents:方法设置按钮被触摸时的响应方法 buttonDidPush,关于按钮等控件
的响应事件的设置第4.2节(UIButton)将进行介绍。buttonDidPush方法中只有如下一行代码,实现画面的切换。

[s elf.v ie w.w i n d o w s e n d Su b v ie w ToB ack:s elf.v ie w];
作为UIWindow的子元素,UIView可以通过其Window属性参照UIWindow(通常应用程序只有唯一的UIWindow)。这行代码的作用是“将画面自己隐藏到背面去”,因为原来UIWindow中包含有两个画面,当前画面隐藏到背面后,另一个画面就会显示在前面。

至于将两个画面(UIView)追加到UIWindow中的处理在HelloWorldAppDelegate类中实现,以下是HelloWorldAppDelegate的详细代码,黑体字部分表示向UIWindow中追加两个画面。
[Hello W orld A p pD ele g ate.h]
#i m p or t < UIK it/UIK it.h >
@interface HelloWorld AppDelegate : NSObject <UIApplicationDelegate> {
  UIWi n d o w*w i n d o w _ ;
   UI Vie w Co nt r oller*v ie w Co nt r oller1 _ ;
  UI Vie w Co nt r oller*v ie w Co nt r oller2 _ ;
}
@pr o p er ty (n o n ato m ic, r et a i n) UIWi n d o w*w i n d o w;
@e n d
[Hello W orld A p pD ele g ate.m]
#i m p or t "Hello W orld A p pD ele g ate.h"
#i m p or t "Vie w Co nt r oller1.h"
#i m p or t "Vie w Co nt r oller2.h"
@i m ple m e nt at io n Hello W orld A p pD ele g ate
@sy nt h esize w i n d o w = w i n d o w _ ;
- (void)applicationDid FinishLau nching:(UIApplication *)application {
 
  // 初始化Wi n d o w
  CG R e c t b ou n d s = [[UIScr e e n m a i nScr e e n] b ou n d s];
  w i n d o w _ = [[UIWi n d o w a llo c] i n itWit h Fra m e:b ou n d s];
 
  // 创建Vie w Co nt r oller1与Vie w Co nt r oller2
  // 并将其画面(v ie w)追加到Wi n d o w中
  v ie w Co nt r oller1 _ = [[Vie w Co nt r oller1 a llo c] i n it];
  v ie w Co nt r oller2 _ = [[Vie w Co nt r oller2 a llo c] i n it];
  [w i n d o w _ ad d Su b v ie w:v ie w Co nt r oller1 _ .v ie w];
 [w i n d o w _ ad d Su b v ie w:v ie w Co nt r oller2 _ .v ie w];
  // Vie w Co nt r oller1放在前面显示
  [w i n d o w _ bri n gSu b v ie w ToFr o nt:v ie w Co nt r oller1 _ .v ie w];
  [w i n d o w _ m a k e KeyA n d Visi ble];
}
- (v oid)d e a llo c {
  [v ie w Co nt r oller1 _ r ele a s e];
  [v ie w Co nt r oller2 _ r ele a s e];
  [w i n d o w _ r ele a s e];
  [s u p er d e a llo c];
}
@e n d

在应用程序初始化applicationDidFinishLaunching:方法中,首先创建两个画面的实例,然后分别追加(使用addSubview:方法)到UIWindow中,最后调用UIWindow的bringSubviewToFront:方法 将第一个画面显示在前面。

实例运行后的效果如图3-2所示。
 

 
  

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

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