Xcode 学习之路 Interface Builder使用技巧

最近在看电驴上down下来的ipad开发视频教程。为加深记忆,特在此做笔记。

前两集视频主要讲的是UIAlertView(相当于windows里面的MessageBox)

在interface builder里面添加了控件之后,要想使得控件响应事件必须做如下处理:

1:在XXXViewController.h里面添加事件响应函数声明如:

-(IBAction)btnOnclick:(id)sender; 

2:在相应的.m文件中实现这个函数

3:回到interface builder中鼠标右键从需要使用这个事件相应函数的控件拖拽到File's Owner上并在弹出的选项中选中步骤1中的函数名,使之关联起来。

Xcode 学习之路 Interface Builder使用技巧

注意:这个视频里面提到了一个特别的控件就是UIAlertView,因为这个控件没有在interface builder中提供出来编辑。所以如果这个要使这个控件的事件得到相应需要在XXXViewController.h文件里面声明类的时候使用协议(类似C++里面的抽象基类的多重继承)。样子如下:

#import <UIKit/UIKit.h> 



@interface AlertViewTestViewController : UIViewController <UIAlertViewDelegate>{  



}  


@end 

然后在实现文件里面实现对应的事件处理函数。对UIAlertView来说。要使用的协议是UIAlertViewDelegate,要实现的事件响应函数是 - (void)alertView:(UIAlertView* )alertView clickedButtonAtIndex:(NSInteger)buttonIndex。实际上,使用了协议之后,可以根据协议名字在帮助里面很快的找到这个协议需要实现哪些函数。

控件还有另外一个比较重要的东西就是数据绑定。在xcode里面要实现这么一个东西步骤基本和上面的类似

1:在XXXViewController.h文件里面声明之,下面声明了一个文本数据

@interface OutletAndActionViewController : UIViewController {  


    IBOutlet UITextField *txtName;  


}  


@property(nonatomic, retain) UITextField *txtName;  


@end 

2:实现文件里面给出set和get函数。如果使用了属性,你懂的。。。

@synthesize txtName; 

3:回到interface builder中鼠标右键从File's Owner中拖拽到需要绑定这个数据的控件上并在弹出的选项中选中,使之关联起来。拖拽方向和上面相反。写到这里。我在想IBAction和IBOutlet到底是个啥?

Xcode 学习之路 Interface Builder使用技巧

在头文件中找到了他们的定义:

#ifndef IBOutlet   


#define IBOutlet   


#endif  


 


#ifndef IBAction   


#define IBAction void   


#endif 

几乎啥都没干。最后在cocoachina上找到了答案。

原帖:http://www.cocoachina.com/bbs/read.php?tid-18829.html

内容如下:

These two keywords do absolutely nothing as far as the compiler is concerned. IBOutlet gets entirely removed from the code before the compiler ever sees it. IBAction resolves to a void return type, which just means that action methods do not return a value. So, what’s going on here?
The answer is simple, really: IBOutlet and IBAction are not used by the compiler. They are used by Interface Builder. Interface Builder uses these keywords to parse out the outlets and actions available to it. Interface Builder can only see methods that are prefaced with IBAction and can only see variables or properties that are prefaced with IBOutlet. Also, the presence of these keywords tells other programmers, looking at your code in the future, that the variables and methods in question aren’t dealt with entirely in code. They’ll need to delve into the relevant nib file to see how things are hooked up and used.

相关推荐