iPhone起步-1: "Hello,World!" in iPhone Development (转)

1.认识Xcode和Interface Builder(IB)

 

2.MVC泛型
MVC模型将所有功能划分为3种:
模型:保存应用程序数据的类。
视图:窗口、控件和其他用户可以看到并能与之交互的元素的组成部分。
控制器:将模型和试图绑定在一起,确定如何处理用户输入的应用程序逻辑。

 

3.基本概念
属性声明:@property (retain, nonatomic) IBOutlet UIButton *myButton;
属性实现:@synthesize myButton;
输出口(outlet): 控制器类可以使用输出口(通过关键字IBOutlet声明的实例变量)来引用nib中的对象。
操作:nib文件中的界面对象触发控制器类中的特殊方法,通过关键字IBAction声明的方法。例如: - (IBAction) doSomething: (id)sender;

 

4.Hello,World示例
我们将创建一个很简单的iPhone程序作为我们iPhone之旅的"Hello,World".
界面如下图所示,

触摸Button时,将弹出一个提示框(alert),提示框的内容为TextField中的输入。


步骤如下:
启动Xcode,创建一个名为"HelloiPhone",基于iPhone OS | Application | View-based Application项目模板的应用程序。
打开控制器类头文件HelloiPhoneViewController.h的,添加属性和方法声明:

 

//
//  HelloiPhoneViewController.h
//  HelloiPhone
//
//  Created by Elf Sundae on 11/4/10.
//  Copyright 2010 Elf.Sundae(at)Gmail.com. All rights reserved.
//

#import 
< UIKit / UIKit.h >

@interface HelloiPhoneViewController : UIViewController
{
UITextField 
*  textField;
}

@property (retain, nonatomic) IBOutlet UITextField 
* textField;

-  (IBAction) buttonPressed: (id)sender;

@end

 

在Groups & Files窗格下的Resources下,双击 HHelloiPhoneViewController.xib ,将打开Interface Builder。

 

选择菜单 Tools | Library(command + Shift + L),从Library下的Objects拖动一个Text Field和一个Round Rect Button到View。双击button改名为“OK”。
按着Ctrl键,从IB主窗口的File's Owner拖一条线到View的Text Field,在弹出的窗口选择textField。
鼠标点选View中button,按command+2或者菜单选择"Tools | Connetions Inspector",从Event中的Touch Up Inside后面的小圆圈拉一条线连接到主窗口的File's Owner,并在弹出窗口中选择“buttonPressed:”。以上拖拽动作称为“连接”,将我们在类控制器中声明的IBOutlet和IBAction连接到IB视图中控件或方法。


下来回到Xcode实现控制器类:

1 //
2 //  HelloiPhoneViewController.m
3 //  HelloiPhone
4 //
5 //  Created by Elf Sundae on 11/4/10.
6 //  Copyright 2010 Elf.Sundae(at)Gmail.com. All rights reserved.
7 //
8
9 #import  " HelloiPhoneViewController.h "
10
11 @implementation HelloiPhoneViewController
12
13 @synthesize textField;
14
15 -  (IBAction) buttonPressed: (id)sender
16 {
17  UIAlertView  * alert  =  [[UIAlertView alloc] initWithTitle: @" Hello,iPhone! "  
18  message:self.textField.text 
19 delegate :nil 
20  cancelButtonTitle: @" OK! "  
21  otherButtonTitles:nil];
22  [alert show];
23  [alert release];
24 }
25
26 -  ( void )didReceiveMemoryWarning {
27 //  Releases the view if it doesn't have a superview.
28  [super didReceiveMemoryWarning];
29  
30 //  Release any cached data, images, etc that aren't in use.
31 }
32
33 -  ( void )viewDidUnload {
34 //  Release any retained subviews of the main view.
35 //  e.g. self.myOutlet = nil;
36  self.textField  =  nil;
37 }
38
39
40 -  ( void )dealloc {
41  [textField release];
42  [super dealloc];
43 }
44
45 @end

 

运行iPhone模拟器测试后发现键盘不能自动关闭。下面来解决这个问题,让输入完后按键盘上的return即可关闭,或者触摸背景关闭键盘(数字键盘上没有return键,iphone程序常设计为触摸背景关闭键盘输入状态)。

 

完成输入后关闭键盘
当用户按下return键时,将生成一个Did End On Exit事件,此时我们需要让textField取消控件已关闭键盘。
用户当前正在与之交互的控件称为第一响应者(firstResponder)。
方法 - (BOOL)resignFirstResponder 使触发此操作的控件取消第一响应者状态。

我们在控制器类头文件中声明方法:

-  (IBAction) textFieldDoneEditing: (id)sender;

保存项目后在IB中将textField的Did End On Exit事件连接到此方法。保存IB返回Xcode实现此方法:

-  (IBAction) textFieldDoneEditing: (id)sender
{
//消第一响应者状态
[sender resignFirstResponder];
}

 

重新编译并运行,发现可以通过按下return键来完成输入了!

 
通过触摸背景关闭键盘
并非所有键盘布局都有return键,例如数字键盘。苹果公司的iPhone程序是这样做的:在大多数有textField的情况下,在试图中任何无活动控件的位置按下手指都可让键盘消失。实现此功能非常简单,只要创建一个不可见的按钮,将其置于其他所有元素的后面,用于通知textField在检测到触摸操作时生成第一响应者状态。

//  通过触摸屏幕关闭键盘
-  (IBAction) backgroundTap: (id)sender
{
//  在非第一响应者控件上调用resignFirstResponder是绝对安全的。
//  因此可以放心的对所有textField调用resignFirstResponder
[textField resignFirstResponder];
}

保存代码来到IB。我们现在需要更改nib试图的底层类。
在IB主窗口中单击选择View,command+4 调出身份检查器。将标有Class的字段由UIView更改为UIControl。能够触发操作方法的所有控件都是UIControl的子类,所以通过更改底层类,此View将能够触发操作方法。
现在按command + 2 应该能看到Event。将Touch Down事件连接到File's Owner的backgroundTap:操作。
保存IB返回Xcode后编译并运行,可以看到触摸视图中没有活动控件的任何位置(屏幕背景或lable等控件)都将触发backgroundTap:操作。

 

应用程序图标

应用程序图标为57×57都PNG文件,iPhone将自动将边缘圆角化并让它具有玻璃质感。默认情况下,SDK会搜寻名为icon.png的资源并使用它作为应用程序图标。如果你都图标文件不叫icon.png,可以在plist中添加图标属性,方法为:将图标文件添加到项目Resources文件夹中,打开项目-Info.plist,在Icon file中填入图标文件名。

代码整理

 

HelloiPhoneViewController.h
1  //
2    //  HelloiPhoneViewController.h
3    //  HelloiPhone
4    //
5  //  Created by Elf Sundae on 11/4/10.
6  //  Copyright 2010 Elf.Sundae(at)Gmail.com. All rights reserved.
7  //
8 
9  #import  < UIKit / UIKit.h >
10 
11  @interface HelloiPhoneViewController : UIViewController
12  {
13  UITextField  *  textField;
14  }
15 
16  @property (retain, nonatomic) IBOutlet UITextField  * textField;
17 
18  -  (IBAction) buttonPressed: (id)sender;
19  -  (IBAction) textFieldDoneEditing: (id)sender;
20  -  (IBAction) backgroundTap: (id)sender;
21 
22  @end
HelloiPhoneViewController.m
1  //
2  //  HelloiPhoneViewController.m
3  //  HelloiPhone
4  //
5  //  Created by Elf Sundae on 11/4/10.
6  //  Copyright 2010 Elf.Sundae(at)Gmail.com. All rights reserved.
7  //
8 
9  #import  " HelloiPhoneViewController.h "
10 
11  @implementation HelloiPhoneViewController
12 
13  @synthesize textField;
14 
15  -  (IBAction) buttonPressed: (id)sender
16  {
17  UIAlertView  * alert  =  [[UIAlertView alloc] initWithTitle: @" Hello,iPhone! "  
18  message:self.textField.text 
19  delegate :nil 
20  cancelButtonTitle: @" OK! "  
21  otherButtonTitles:nil];
22  [alert show];
23  [alert release];
24  }
25 
26  -  (IBAction) textFieldDoneEditing: (id)sender
27  {
28  //  取消textField第一响应者状态
29  [sender resignFirstResponder];
30  }
31 
32  //  通过触摸屏幕关闭键盘
33  -  (IBAction) backgroundTap: (id)sender
34  {
35  //  在非第一响应者控件上调用resignFirstResponder是绝对安全的。
36  //  因此可以放心的对所有textField调用resignFirstResponder
37  [textField resignFirstResponder];
38  }
39  -  ( void )didReceiveMemoryWarning {
40  //  Releases the view if it doesn't have a superview.
41  [super didReceiveMemoryWarning];
42 
43  //  Release any cached data, images, etc that aren't in use.
44  }
45 
46  -  ( void )viewDidUnload {
47  //  Release any retained subviews of the main view.
48  //  e.g. self.myOutlet = nil;
49  self.textField  =  nil;
50  }
51 
52 
53  -  ( void )dealloc {
54  [textField release];
55  [super dealloc];
56  }
57 
58  @end

 


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值