刚开始学习ios开发,由于直接使用的xcode4.2开始学习的,资料很少,其操作和网上比较普通的xcode3.x差异很大,所以是摸着石头过河的感觉。经过N久尝试,终于学会了UI和代码的连接。发现有两个方法可以实现:
项目创建:
1.新建工程 > ios > Appliction > Single View Appliction
2.在主项目代码文件夹下新建 > ios > User Interface > Empty > Device Family[iPhone] > Save As[ViewController]
3.在Group & Files里,选择ViewController.xib,在File Inspector对象创建列表中选择Object拖入Document Outline下 Objects里面。
4.选中刚刚拖入进来的Object,在identity Inspector里面,将Class属性里面输入ViewController,即将类指定为ViewController.h。
5.在项目编译设置里面,在Main Interface 下拉框选择ViewController.
6.返回ViewController.xib编辑界面,拖入一个Window组件。然后在在Window组件里面拖入一个TextField和两个Round Rect Button。标识符分别指定为myTitleLabel、leftButton、rightButton。将leftButton的Label键入left,将rightButton的Label键入right。
OK,现在xib文件创建好了,点击运行,现在就可以在IOS模拟器里面看到我们刚刚创建的按钮和文本了。
UI连接和元素控制:
方法一:
1.打开ViewController.h,在@interface ViewController : UIViewController下键入以下代码:
@property (strong, nonatomic) IBOutlet UITextField *myTitleLabel;
@property (strong, nonatomic) IBOutlet UIButton *leftButton;
@property (strong, nonatomic) IBOutlet UIButton *rightButton;
-(IBAction)changeTextEvent:(id)sender;
changeTextEvent 是用来实现按钮改变文本框里面的文字的函数。
2.打开ViewController.m,在@implementation ViewController下面输入:
@synthesize leftButton = _leftButton;
@synthesize rightButton = _rightButton;
@synthesize myTitleLabel = _myTitleLabel;
-(IBAction)changeTextEvent:(id)sender{
NSString *title = [sender titleForState:UIControlStateNormal];
NSString *newTxt = [[NSString alloc] initWithFormat:@"%@ button pressed.",title];
_myTitleLabel.text = newTxt;
}
3.打开ViewController.xib,在右上角的Editor里面选择中间的按钮分屏显示代码,此时主代码编辑区域分为了两个屏,左边是xib的视图编辑器,右边打开的是ViewController.h。在Document Outline工具栏里面,在Window下leftButton上,按下鼠标右键,拖动鼠标,此时会有一根射线跟随鼠标,将射线拖动到右边ViewController.h里面的@property(strong,nonatomic) IBOutlet UIButton *leftButton;代码区域上放开,rightButton和myTitleLabel执行对应操作。
4.ViewControl.h下,鼠标左键点击-(IBAction)changeTextEvent:(id)sender;前的圆点,将射线拖到右边leftButton上,然后执行相同操作拖到rightButton上。
5.运行程序,此时将会看到点击左右键会分别改变TextField的内容。
方法二:
1.打开ViewController.h,将@interface ViewController : UIViewController替换为
@interface ViewController : UIViewController{
IBOutlet UITextField *_myTitleLabel;
IBOutlet UIButton *_leftButton;
IBOutlet UIButton *_rightButton;
}
-(IBAction)changeTxtEvent:(id)sender;
2.打开ViewController.m,在@implementation ViewController下输入
-(IBAction)changeTextEvent:(id)sender{
NSString *title = [sender titleForState:UIControlStateNormal];
NSString *newTxt = [[NSString alloc] initWithFormat:@"%@ button pressed.",title];
_myTitleLabel.text = newTxt;
}
3.在分屏模式下,在Document Outline工具栏里面,在Window下leftButton上,按下鼠标右键,拖动鼠标,此时会有一根射线跟随鼠标,将射线拖动到右边 ViewController.h里面的IBOutlet UIButton *_leftButton;代码区域上放开,rightButton和myTitleLabel执行对应操作。
4.在分屏模式下,在右边ViewController.h里的-(IBAction)changeTxtEvent:(id)sender;前面的圆点上按下左键拖动,将射线拖到左边xib设计界面上的leftButton和rightButton上。
5.运行程序,此时也会看到和上面方法相同的效果。
两种方法比较,第一种方法比较复杂一点。
另看《iPhone4与iPad开发基础教程》一书里是这样写的:
<ViewController.h>:
@interface ViewController : UIViewController{
UITextField *_myTitleLabel;
UIButton *_leftButton;
UIButton *_rightButton;
}
@property(retain,nonatomic) IBOutlet UITextField *_myTitleLabel;
@property(retain,nonatomic) IBOutlet UIButton *_leftButton;
@property(retain,nonatomic) IBOutlet UIButton *_rightButton;
-(IBAction)changeTxtEvent:(id)sender;
@end
<ViewController.m>:
@synthesize _myTitleLabel;
@synthesize _leftButton;
@synthesize _rightButton;
-(IBAction)changeTxtEvent:(id)sender{
NSString *title = [sender titleForState:UIControlStateNormal];
NSString *newTxt = [[NSString alloc] initWithFormat:@"%@ button pressed.",title];
_myTitleLabel.text = newTxt;
}
这个写法和第一种相比较,应该是变量的实例化阶段的不同,一个是在接口中实例化,一个是在实现中实例化。本人新手,如有不对恳请路过的大神指教。
另外,在上面的changeTxtEvent方法中有这样一行类似与Java、Actionscript中的写法:
_myTitleLabel.text = newTxt;
事实上,在Object-c中的标准写法应该是:
[_myTitleLabel setText:newTxt];
不知道在Object-c中是否所有的setter和getter都可以像Java那样写,此疑问还待以后的学习中求证。
转帖:http://mouselife.net/About%20Codes/165.html