在前面我们建立了一个简单的Hello World!程序。其实我们并不知道这个程序是怎么运行起来的,各组件是怎么工作的。事实在我们在iPad程序开发过程中,我们需要学习大量的知识。一穷 二白最艰难,但是也是最有效果和成就感的,当然也很枯燥。这节开始我们来一起了解创建iPad程序用户界面(UI)和怎样将我们的代码和图形工具进行链 接; 输出和事件响应 首先我们需要理解iPad程序的outlets(输出或者说引用)和Actions(事件响应或者动作),在这一点上,Objective其实和Java和C#很想像,概念是一样的就是实现的手法有所不同而已。好让我们用实例来讲解一下: 1.打开我们的Xcode,创建一个视图应用程序(View-based Application )取个名字叫OutletsAndActions 2.双击 OutletsAndActionsViewController.xib文件,打开Interface Builder。在View窗口中用Label,TextField,和Button插件分别创建一个标签、文字输入框和一个按钮。将标签名称改 为:Enter your Name,按钮名称弄成“OK”。如图: 3.在Xcode中,我们在OutletsAndActionsViewController.h文件添加代码: #import <UIKit/UIKit.h> @interface OutletsAndActionsViewController : UIViewController { //---declaring the outlet--- IBOutlet UITextField *txtName; } //---expose the outlet as a property--- @property (nonatomic, retain) UITextField *txtName; //---declaring the action--- -(IBAction) btnClicked: (id) sender; @end #import <UIKit/UIKit.h>
@interface OutletsAndActionsViewController : UIViewController {
//---declaring the outlet---
IBOutlet UITextField *txtName;
}
Outlets and Actions ? 47
//---expose the outlet as a property---
@property (nonatomic, retain) UITextField *txtName;
//---declaring the action---
-(IBAction) btnClicked: (id) sender;
@end
4.在OutletsAndActionsViewController.m文件中添加下面代码: #import “OutletsAndActionsViewController.h” @implementation OutletsAndActionsViewController //---synthesize the property--- @synthesize txtName; //---displays an alert view when the button is clicked--- -(IBAction) btnClicked:(id) sender { NSString *str = [[NSString alloc]initWithFormat:@“Hello, %@“, txtName.text]; UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@“Hello!” message:str delegate:self cancelButtonTitle:@“Done” otherButtonTitles:nil]; [alert show]; [str release]; [alert release]; } 找到dealloc段,添加: - (void)dealloc { //---release the outlet--- [txtName release]; [super dealloc]; } 5.剩下的操作很easy.按住Ctrl将File's Owner拖向文字输入窗口(TextField).在弹出的小窗口选 折txtName的输出. 6.按住Ctrl将Ok按钮拖动到File's Owner.选择btnClicked:的事件响应(action). 7.右键单机Ok按钮,我们可以看到事件列表 注意在这些事件中有一个事件-Touch Up Inside是被链接好了的,因为我们将按钮拖动到File's Owener 的时候系统会自动连接好.如果我们想对另外的事件做出响应,那么我们可以点击事件右边的圆圈,拖动它 到File's Owner中就可以了. 8.好了,C+S(Ctrl+S,^_^老九偷懒了),C+R.运行看看,在文字框中输入你的名字,然后按OK, OH!Yeah!老九看到你叫什么名字了,呵呵 下面我们来讲解一下这个程序是怎么运行的: 在iPad中,我们用actions和outlets去链接我们可视化界面的各种代码.actions类似面对像语言中的 方法,outlets相当于对象的引用.当IBAction关键字被激活(被actions)的时候,outlets自动引用IBOutlet 关键字. #import <UIKit/UIKit.h> @interface OutletsAndActionsViewController :UIViewController { //---declaring the outlet--- IBOutlet UITextField *txtName; } //---expose the outlet as a property--- @property (nonatomic, retain) UITextView *txtName; //---declaring the action--- -(IBAction) btnClicked: (id) sender; @end IBOutlet关键字:IBOutlet就是一个显式的引用访问标记,一般用于变量前面,以至于Interface Builder 能同步显示所引用的内容和与Xcode语言中的输出进行连接.@property是一个txtName的属性访问声明,扩号内支持以下几个属性: 1,getter=getterName,setter=setterName,设置setter与getter的方法名 注意:IBOutlet标签经常被添加到@property标签中,这在水果公司的文档中比较常见,我们记住就ok了! @property (nonatomic, retain) IBOutlet UITextField *txtName; IBAction关键字:IBAction就是一个方法的显式引用标记,是被用于事件响应的方法的标记.比如当我们用鼠标点击按钮,这个action就是一个出发窗口事件发生的方法.另外一边,作为outlets所引用的内容也就跟随着你的代码所要实现的目的展现出来. 额,在网上有人这样说:假设有两个黑盒子,盒子A里放着代码,盒子B里放着盒子A要用到的ui组件,要想让A里的代码访问到B里的组件,比如想要修改label的文字,那些就要从A处打个洞连到B处,这时就用IBOutlet,B中的组件如一个按钮被用户点击了,要给A发个通知,那么也要事先在A处安个接受装置,这时就用IBAcion.这个东西就只可意会了! 一旦你的actions和outlets被添加到了窗口控制的.h头文件中,我们这时就需要在Interface Builder中连接他们. 当我们按住Ctrl拉动File's Owner去链接TextField文字输入框并且选择txtName标签的时候,实际上我们就在我们用TextField文字输入框所创建的(txtName)上与outlet建立了一个连接.一把而言.连接到outlets我们所要引用的内容,就需要按住Ctrl将File's Owner拖动到视窗中所需要的窗口就可以了. 反过来:如果我们对Actions进行定义,我们就需要按住Ctrl拖动action的处罚点(如按钮)到File's Owner就可以了. 在.m执行文件中,@synthesize关键字是一段简化代码,表示系统自动生成getter和setter两个方法,不需要我们手动编写.(关于@property和@synthesize,这个文章写的很详细,建议新手们拜读,你会有更深入的认识http://www./bbs/read.php?tid-7322.html) 注意:忘记添加@synthesize关键字是初学iPad开发的开发者最容易犯的错误,记住这一点,不然你在运行程序的时候就会出现Runtime error了.空了查查Xcode帮助文档吧!
#import “OutletsAndActionsViewController.h” @implementation OutletsAndActionsViewController //---synthesize the property--- @synthesize txtName; //---displays an alert view when the button is clicked--- -(IBAction) btnClicked:(id) sender { NSString *str = [[NSString alloc]initWithFormat:@“Hello, %@“, txtName.text]; UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@“Hello!” message:str delegate:self cancelButtonTitle:@“Done” otherButtonTitles:nil]; [alert show]; [str release]; [alert release]; } 这段代码理解起来就容易了:一个包含用户名字消息的alert窗口,在btnClicked被action的时候显示出来. 注意这里的id表示任意类型的参数.sender将会允许程序自动寻找谁是这个action的调用者.这个在多个 窗口同时链接到一个action的时候十分有用.在很多例子中,我们经常需要知道哪一个窗口是这个方法的 调用者,sender的参数对应调用哪一个窗口. 慢慢理解,我也是看了n遍资料,查了n多例子程序才明白.今天到这里把,太晚了,明天,哦不,是今天早上我还 要出差呢.呵呵!
|
|