iphone学习笔记(一)

 

Authorquietwalk    

Date2010-10-16

模型对象表示数据。

视图对象知道如何显示数据(模型),并且它们有可能会允许用户对数据进行编辑。

控制器对象位于模型和视图之间。

 

Interface Builder 用于创建并配置 nib 文件。

Interface Builder 文档包含四个对象:

1)文件拥有者代理对象。实际上,文件拥有者对象是 视图控制器实例(MyViewController实例)也可以认为是应用程序实例(UIApplication实例)。

2)第一响应者代理对象。  

3)应用程序的委托,文件名为“YourAppName+AppDelegate”。

4)一个窗口。

 

插座变量(outlet):视图控制器中定义的变量。在视图控制器中定义变量之后,同进也会在IB的文档所有者中有所体现,前面已说了,IB的文档所有者其实就是Xcode 中的视图控制器类。

 

 

 

 

 

 

Interface Builder 创建用户接口。Interface Builder 创建用户接口

.nib” NextStep Interface  Builder”的首字母缩写。程序运行时会加载 nib 文件,解档文件中的对象并且将其恢复到被保存至文件那一瞬间的状态-包括对象间的所有关联。

 

XIB 文件:含三个对象,文件拥有者代理、第一响应者代理、视图。

文件的拥有者: 视图控制器实例。

 

identity:属性,特性。

视图插座变量:文件与视图的关联。

Inspector:检查员

 

Interface Builder 包含一个对象库,可以将其中的对象添加至 nib 文件。

 

Capitalize:大写字母

 

IBOutlet是一个特殊的关键字,它唯一的作用是通知 Interface Builder 将某个实例变量或者属性当成插座变量。实际上,这个关键字被定义为空白,因此在编译的时候它没有任何作用。


IBAction 
是一个特殊的关键字,它唯一的作用是告诉 Interface Builder 将某个方法当成目标/动作关联中的动作。它被定义为 void

 

在视图控制器中定义变量,相关于在界面的设计部分类中定义控件变量;

在视图控制器类的接口中添加了实例变量和属性声明,方法的声明;在视图控制器类实现中添加方法的存根实现。

 

initWithFormat:@"Hello, %@!", nameString

initWithFormat:方法符串按照格式化字符串所指定的格式创建一个新

字符串。%@表明此处应该使用一个字符串对象来代替。

Xcode工作空间指南

iphone 应用程序编程指南

iphone 开发指南

 

制定关联:关联标签和文本字段的插座变更。从文件拥有者到视图控件。

按下 Contrl 键并点击文件拥有者,一个半透明的面板就会显示出来,面板里面显示了所有可用的插座变量和动作。请将光标从列表右边的圆圈拖动到所要关联的视图项上面,这样就可以建立二者之间的关联。

 

1、新建工程:

步骤:启动 Xcode(缺省情况下,Xcode 位于 /Developer/Applictions里面),选择 File > New >Project,选中 Window-Based Application 并点击 Choose 按键,选择一个合适的位置(例如您可以放在桌面也可以放在一个定制的工程目录),然后为工程添加一个名称—HelloWorld—再点击保存按键。

2、添加一个视图控制器类。

说明:负责管理一个视图(定制应用程序的行为)。在 iPhone上,它们也帮助进行导航和内存管理。UIKit提供一个特别的类   UIViewController类—它封装了视图控制器应该具有的大部分缺省行为。从它派生子类,在子类中定制应用程序的行为。

步骤:

(1) 者选中 Classes 文件夹;

(2) 请选择 File > New File

(3) 请选择 Cocoa Touch Classes

(4) 选择UIViewController subclass,同时,请勾选 Options 区域中标题为 With XIB for user interface 的选择框。

(5) 点击 Next,在其后出现的屏幕中为文件起个名字,例如 MyViewController

(6) 点击 Finish,文件会被添加到工程。

3、在 应用程序委托类头文件 中添加一个视图控制器实例并为其添加属性(即“HelloWorldAppDelegate.h”文件中)

说明:将视图控制器作为应用程序委托的一个实例变量。添加到应用程序委托的实例变量是 MyViewController类的实例。

步骤:

1)前向声明视图控制器:在应用程序委托头文件(HelloWorldAppDelegate.h)的接口声明前面-

HelloWorldAppDelegate声明前面-添加前向声明“@class MyViewController;”;

2)添加视图控制器实例变量:

说明:应用程序委托头文件中为视图控制器类添加一个实例变量

步骤:在头文件大括号之间添加“MyViewController *myViewController;”;

3)添加视图控制器实例变量属性:

说明:实例含有一个属性,可以使用 getter setter 方法—即

myViewController”和 setMyViewController:”方法—来访问该属性,同时,委托实例还会保持该属性。

步骤:应用程序委托头文件大括号之后 @end添加下面的属性声明: 

@property (nonatomic, retain) MyViewController *myViewController;”;

4、在 应用程序委托类实现文件 中创建视图控制器实例(即“HelloWorldAppDelegate.m”文件中)

说明:步骤3已经把视图控制器实例添加到应用程序的委托,现在需要实际创建一个视图控制器实例,并将其设置为属性的值。

步骤:在applicationDidFinishLaunching:方法开头添加如下代码,这些代码用于创建一个MyViewController实例:

MyViewController *aViewController = [[MyViewController alloc]

                        initWithNibName:@"MyViewController" bundle:[NSBundle mainBundle]];

self.myViewController = aViewController;

[self setMyViewController:aViewController]; 这行等同于上一行。

[aViewController release];

代码说明:

(1) 创建并初始化一个视图控制器类的实例。

先使用 alloc方法创建一个视图控制器,然后用 initWithNibName:bundle:方法对其进行初始化。

(2) 使用存取方法将新建的视图控制器是设置为 myViewController实例变量值。

(3) 没有单独声明 setMyViewController:方法,而是隐式将其作为属性声明的一部分。

(4) 依照内存管理规则释放视图控制器。第三行调用 release方法以放弃对所创建对象的拥有权。

5、在 应用程序委托类实现文件 中建立视图(即“HelloWorldAppDelegate.m”文件中)

说明:视图控制器负责管理和配置视图。您并不直接创建窗口的内容视图,而是从视图控制器获取,并将其添加成窗口子视图。

步骤:在4中释放视图控制器之后添加:

UIView *controllersView = [myViewController view];

[window addSubview:controllersView];

代码说明:建立视图并返回给窗口。

之后,IDE添加代码“[window makeKeyAndVisible];”将窗口(现已含有您的视图)显示在屏幕上。

6、内务处理

1)在 应用程序委托类的实现文件 中导入视图控制器头文件

方法:在“HelloWorldAppDelegate.m”中导入#import "MyViewController.h"

2)在 应用程序委托类的实现文件 中为视图控制器合成存取方法

步骤:在应用程序委托类的实现文件的 @implementation代码块中通知编译器为视图控制器合成存取方法“@synthesize myViewController;

3)释放视图控制器

步骤:在 dealloc方法起始处释放视图控制器“[myViewController release];”。

7、设置视图背景:

1)在 Interface Builder 选择视图,然后选择 Tools > Attributes Inspector ,这样屏幕就会显示Attributes inspector

 

 

2)点击 Background 选色板上的方框,让颜色面板显示在屏幕上。然后在其中选择一种不同的颜色。

3)保存 nib 文件。

8、添加用户接口元素

在视图窗口中添加TextBox LabelButton 等界面元素。

9、在 视图控制器头文件 中添加8对应的变量

说明:建立视图控制器到用户接口的关联

UITextField *textField;

UILabel *label;

NSString *string;

 

 

在视图控制器中定义变量之后,同进也会在IB的文档所有者中有所体现。

 

 

10、在 视图控制器头文件 为9中定义的变量添加属性声明及要使用的方法

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

@property (nonatomic, retain) IBOutlet UILabel *label;

@property (nonatomic, copy) NSString *string;

-         (IBAction)changeGreeting:(id)sender;

最后一行是声明了一个方法。

代码说明:

(1) IBOutlet是一个特殊的关键字,它唯一的作用是通知 Interface Builder 将某个实例变量或者属性当成插座变量。实际上,这个关键字被定义为空白,因此在编译的时候它没有任何作用。

(2) IBAction 是一个特殊的关键字,它唯一的作用是告诉 Interface Builder 将某个方法当成目标/动作关联中的动作。它被定义为 void

(3) 视图控制器还作为界面控件的委托。

11、在 视图控制器实现文件 中为在头文件中定义的方法做出实现

12、制定关联

前提:已经定义了视图控制器的插座变量和动作;

建立关联的地方:nib 文件中。

(1) 关联标签和文本字段的插座变更。

From:文件所有者;

To:视图控件。

方法:按下 Contrl 键并点击文件拥有者,一个半透明的面板就会显示出来,

面板里面显示了所有可用的插座变量和动作。将光标从列表右边的圆圈拖动到所要关联的视图项上面,这样就可以建立二者之间的关联。

 

 

 

(2) 事件响应(以按钮的点击事件为例):

From:视图中控件;

To:文档所有者。

方法:按下 Control 键并点击视图中的按键,在随后出现的查看器中,将光标从事件列表 Touch Up 项的开口圆圈拖动到文件拥有者的图标。待文件拥有者上面出现一个半透明面板后,选择其中的 changeGreeting:方法(此方法已定义)。

 

 

13、实现 视图控制器 类

说明:实现视图控制器要做三件事。要对实例变量作一些处理,包括内存管理方面的处理;需要实现changeGreeting:方法;需要确保用户点击 Done 按键的时候,键盘会消失。

1)为视图控制器中的 变量 合成存取方法

首先要让编译器合成存取方法。

>>  MyViewController.m文件的@implementation MyViewController后面添加下列代码:

@synthesize textField;

@synthesize label;

@synthesize string;

2)管理 视图控制器 中的 变量 内存

方法:更新 MyViewController.m文件中的 dealloc方法,让它在调用父类的实现之前先释放实例变量:

- (void)dealloc {

        [textField release];

        [label release];

        [string release];

 

[super dealloc]; //调用父类的实现之前

}

3)实现 视图控制器 中定义的方法,使其完成一定的工作

- (IBAction)changeGreeting:(id)sender {

  

        self.string = textField.text;

  

        NSString *nameString = string;

        if ([nameString length] == 0) {

                nameString = @"World";

        }

        NSString *greeting = [[NSString alloc] initWithFormat:@"Hello, %@!", nameString];

        label.text = greeting;

        [greeting release];

}  

 

posted @ 2010-10-16 23:09  quietwalk  阅读(1149)  评论(0编辑  收藏  举报