iPhone应用程序 Say Hello实例操作 (中篇)

移动开发 iOS
本文介绍的是iPhone应用程序 Say Hello实例操作,以图文的形式为友们介绍,刚方便与操作学习,我们先来看内容。

iPhone应用程序 Say Hello实例操作 (中篇)是本节姐的内容,继续 iPhone应用程序 Say Hello实例操作 (上篇)开始介绍,先来看内容。项目开始了。

添加视图控制器(UIViewController)

添加视图控制器文件在iPhone应用程序中,视图控制器(UIViewController)起着核心作用。顾名思义,视图控制器负责管理控制视图。在iPhone上,它们也帮助进行导航和内存管理。

选中Xcode项目管理器里的项目(即SayHello项目,位于Groups and Files列表的顶部)或者选中SayHello文件夹——新文件在添加时会被加入到当前选择的位置。 选中后,在Xcode菜单中选择 File > New > New File,也可以在选中的文件夹上面点右键,选择 New File。

iPhone应用程序 Say Hello实例操作

在New File窗口中,请选择Cocoa Touch,然后选择UIViewController subclass。

iPhone应用程序 Say Hello实例操作

点击 Next 按钮,在Options窗口,请勾选 “With XIB for user interface”复选框。选中 “With XIB for user interface”后,Xcode在创建视图控制器的同时,会为其创建一份nib文件,并将该文件添加到项目中。

iPhone应用程序 Say Hello实例操作

点击Next按钮,在其后出现的保存文件窗口中,为文件起个名字,例如RootTimelineViewController,并选择文件存储的位置,如下所示:

iPhone应用程序 Say Hello实例操作

点击 Save,文件会被添加到项目中。接下来,我们将创建控制器类的实例。

创建视图控制器实例现在,我们有了视图控制器的类和nib文件,但要在应用程序代理中使用它,还必须创建类的实例,并且将实例存储在变量中,以便操作它。

在应用程序委托类的头文件(即SayHelloAppDelegate.h)中执行下述操作:

在一个类中访问另一个类,首先需要引用被访问类的头文件。所以我们先在应用程序委托头文件(SayHelloAppDelegate.h)的接口声明前面-即SayHelloAppDelegate声明前面引用视图控制器(RootViewController)的头文件:

  1. #import "RootViewController.h"  

然后在头文件大括号之间添加下面的代码,这是为了向应用程序委托添加一个实例变量:

  1. RootViewController *viewController; 

在大括号之后 @end之前添加下面的属性声明:

  1. @property (nonatomic, retain) RootViewController *viewController; 

在头文件中添加完相应变量和属性申明后,需要在对应的实现文件中,合成属性的存取方法,在dealloc方法中释放视图控制器的实例。

在应用程序委托类的实现文件(即SayHelloAppDelegate.m)中执行下述操作:

在类的 @implementation代码块中通知编译器为视图控制器合成存取方法:

  1. @synthesize viewController; 

在dealloc方法起始处释放视图控制器:

  1. [viewController release]; 

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

在应用程序委托类实现文件(即SayHelloWorldAppDelegate.m文件)中的applicationDidFinishLaunching: 方法开头添加如下代码,这些代码用于创建一个RootViewController实例:

  1. RootViewController *controller = [[RootViewController alloc]initWithNibName:@"RootViewController" bundle:nil];  
  2. self.viewController = controller;  
  3. [controller release]; 

这段代码的作用如下:

创建RootViewController这个视图控制器的实例。使用alloc方法创建一个视图控制器,然后用initWithNibName:bundle:方法对其进行初始化。init方法先指定控制器应加载的nib文件,然后指定在哪个程序包中可找到该文件。程序包是文件系统某个位置的抽象,该位置存放了应用程序将会用到的代码和资源。

使用属性的存取方法,将创建好的视图控制器实例设置为viewController属性变量的值

根据内存管理规则释放视图控制器

视图控制器用来配置和管理在应用程序中看到的视图,每一个视图也对应有一个视图控制器来管理。窗体(window)有一个根视图控制器——这个视图控制器负责配置当窗体显示时最先显示的视图。要让你的视图控制器的内容显示在窗体中,需要去设置窗体的根视图控制器为你的视图控制器。

所以我们的项目中,在上面创建视图控制器实例代码后面再添加一行代码,来设置窗体的根视图控制器为我们新添加的视图控制器:

  1. self.window.rootViewController = controller

最后一行来自于Xcode提供的模板自动生成的代码:

  1. [self.window makeKeyAndVisible]; 

这行代码会让包含了视图控制器视图的Window窗口显示在屏幕上。

本章完整代码,SayHelloAppDelegate.h文件:

  1. #import <UIKit/UIKit.h> 
  2. #import "RootViewController.h"  
  3. @interface SayHelloAppDelegate : NSObject <UIApplicationDelegate> {  
  4. RootViewController *viewController;  
  5. }  
  6. @property (nonatomic, retain) IBOutlet UIWindow *window;  
  7. @property (nonatomic, retain) RootViewController *viewController;  
  8. @end  
  9. SayHelloAppDelegate.m文件:  
  10. #import "SayHelloAppDelegate.h"  
  11. @implementation SayHelloAppDelegate  
  12. @synthesize window=_window;  
  13. @synthesize viewController;  
  14. - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions  
  15. {  
  16. RootViewController *controller = [[RootViewController alloc]initWithNibName:@"RootViewController" bundle:nil];  
  17. self.viewController = controller;  
  18. [controller release];  
  19. self.window.rootViewController = controller;  
  20. [self.window makeKeyAndVisible];  
  21. return YES;  
  22. }  
  23. - (void)dealloc  
  24. {  
  25. [_window release];  
  26. [viewController release];  
  27. [super dealloc];  
  28. }  
  29. @end 

测试运行在Xcode的菜单中选择 Product > Run 或者点击左上角工具栏上的 Run 按钮,iPhone模拟器应该会自动启动。当应用程序启动后,还是看到一个白色屏幕,不过第一次看到的白色屏幕,是应用程序代理中的Window,而这次看到的白色屏幕,是视图控制器RootViewController中的视图。

下一步,我们将开始对界面进行编辑。

编辑Nib文件

在iPhone开发中,一般都会用NIB文件来来负责界面显示,也就是MVC模型里面的视图对象,而NIB文件只包含用户界面元素,不包含任何源码,那么怎么让视图对象和视图控制器关联起来呢?这就需要用到两个非常重要的概念:插座变量(outlet)和文件拥有者代理对象(File's Owner)。

视图控制器的视图和Nib文件视图控制器主要的职责就是配置和管理应用程序中所有的视图,一般来说,视图控制器的视图是放在一个Nib文件中,当然也可以不需要Nib文件,通过程序创建视图,典型的如UITableViewController这样的视图控制器,就可以不需要Nib文件。在创建视图控制器实例时,其中一个主要的构造函数 initWithNibName:bundle: 的第一个参数就是视图控制器对应的Nib文件的名字。视图控制器在其 loadView 方法中加载它的Nib文件。如果是使用 initWithNibName:bundle: 构造函数生成的实例,并且你想在视图加载完成后进行额外的设置,只要重写视图控制器的 viewDidLoad 方法就好了。

在Xcode中点击打开视图控制器的Nib文件(即RootViewController.xib文件),在Xcode中即可直接查看和编辑。文件包含三个对象,文件拥有者代理(File's Owner),第一响应者代理(First Responder)以及一个视图(View)。视图(View)是视图控制器的主视图,在主视图中还可以添加若干子视图。文件拥有者代理(File's Owner)代表Nib文件对应的视图控制器类。理解文件所有者代理的角色,以及如何建立文件所有者和Nib文件中界面元素之间的连接,是非常重要的。

iPhone应用程序 Say Hello实例操作

小贴士: 在Xcode中编辑Nib文件时,可以通过点击右上角工具栏按钮iPhone应用程序 Say Hello实例操作显示隐藏相应面板,方便对界面编辑和属性设置。

文件拥有者(File's Owner)在一个Nib文件中,文件拥有者对象是其中最重要的对象之一,因为正是通过它,来建立起应用程序代码和Nib界面文件中对象之间的连接,具体来说,它就是对应Nib文件的视图控制器对象。以本项目为例,RootViewController.xib这个Nib文件的文件拥有者对象就是RootViewController类的实例。

一般来说,在使用模板同时创建UIViewController文件和对应的Nib文件时,它默认会设置Nib文件对应的文件拥有者为创建的UIViewController类。如果要修改或者设置Nib文件对应的文件拥有者,可以使用 Identity Inspector 面板进行设置。

iPhone应用程序 Say Hello实例操作

如上图所示, 本项目的RootViewController.xib文件对应的文件所有者,在Identity Inspector 面板中,Custom Class部分的Class项,可以看到对应的值是RootViewController,这表示文件拥有者就是RootViewController类的实例,就可以在Xcode中访问文件拥有者类里面标志为IBOutlet的属性和IBAction的方法,和Nib文件中的界面元素建立关联。

视图插座变量

在Xcode中,使用 Inspector 面板,或者在连接面板,可以查看、创建、删除对象之间的连接。要查看视图控制器的连接,可以通过以下步骤:

在Xcode的界面中,从左侧的文件组选中要查看的视图控制器的Xib文件
在视图编辑界面,点击选中 File's Owner
在 Inspector 面板,选中 Connection inspector,这里会显示文件所有者所有的插座连接

iPhone应用程序 Say Hello实例操作

在视图编辑界面,按住Control键点击 File's Owner 或者在 File's Owner上点击右键,弹出一个黑色半透明的面板显示文件所有者的所有连接

在上面第三步,右侧面板显示的连接面板和右键点击File's Owner弹出的半透明连接面板,显示的信息和作用都是一样的,可以根据个人习惯灵活使用。到目前为止唯一的连接是视图控制器的 view 插座变量。一个插座变量就对应视图控制器类的一个属性(有时候也可以是一个实例变量),只不过这个属性和nib文件中的某个界面元素连接在一起。此处的view的连接,表明当nib文件 RootViewController.xib 被加载,并且UIView的实例解档之后,视图控制器的view实例变量会被设置为指向nib文件中的视图。

iPhone应用程序 Say Hello实例操作

中间测试

在项目开发中,尤其在对开发工具和语言不熟悉的时候,需要经常性的对新增的功能进行测试,以确保当前功能运行是正常的。比如我们新增了RootViewController这个自定义视图控制器,需要去测试一下它是不是已经成功添加。要测试视图控制器工作正常,简单的办法修改视图控制器的视图的背景色,例如修改为粉红色背景,然后重新运行,看看是不是界面变成了红色背景。

要设置视图控制器的视图的背景色,步骤如下:

在Xcode的界面中,从左侧的文件组选中视图控制器的Xib文件(RootViewController.xib)

在右侧的功能区域,选择属性面板(Attributes inspector)

在编辑区域,选择视图

在视图的属性面板,点击背景色(Background)对应的颜色下拉框,会弹出颜色选择面板

在颜色选择面板,选择一个合适的颜色,例如粉红色

保存nib文件

点击左上角工具栏的Run按钮,编译运行项目

iPhone应用程序 Say Hello实例操作

正常情况下,编译应该不会出现任何错误,运行后会弹出模拟器,结果如下图所示:

iPhone应用程序 Say Hello实例操作

确认没有问题后,再将应用的背景色还原。还原的话,将视图的背景色设置为白色就好了。

配置视图

Xcode提供了一套对象库,可以直接添加到Nib文件中。其中一部分示界面元素,例如按钮和文本输入框;其他一部分是控制器对象,例如视图控制器。我们当前项目的nib文件已经包含了视图,现在只要添加按钮和文本输入框就好了。从对象库中将用户界面元素拖动到视图中,基本步骤如下:

iPhone应用程序 Say Hello实例操作

在Xcode的界面中,从左侧的文件组选中视图控制器的Xib文件(RootViewController.xib)

在右侧的功能区域,显示对象库(object library)

添加一个按钮(UIButton),一个文本输入框(UITextField),两个文本标签(UILabel)到视图中。可以从对象库里面拖动并将它们放到视图
 
参考前面的原型设计,对界面元素的尺寸和布局进行调整

将右侧功能区域切换到属性面板(Attributes inspector)

选中文本输入框(Text Field),设置Placehold属性为“请输入姓名”

选中左上侧的文本标签(UILabel),设置Text属性为“姓名”

选中下面的文本标签(UILabel),设置Text属性为空,Alignment属性设置为居中对齐

选中按钮(UIButton),设置Title属性为“招呼”

iPhone应用程序 Say Hello实例操作

设置好的界面如下所示:

如果我们想让用户在输入时有一些更好的体验,比如用户输入英文名时,默认会首字母大写;比如键盘会显示完成(Done)按键,点击后完成输入隐藏键盘。要支持这样的输入细节,通过设置文本框属性就可以完成:

在Capitalization下拉列表,选择Words,以支持首字母大写

在Return Key下拉列表,选择Done,以支持键盘上显示完成(Done)按键

iPhone应用程序 Say Hello实例操作

保存文件后,编译运行程序,可以看到运行的界面效果和我们在Xcode中摆放的效果是一样的。点击按钮,按钮会高亮,在文本输入框中点击,会弹出输入键盘,键盘里可以看到完成(Done)按钮。但是还不能根据输入的内容去显示文字,还不能隐藏键盘,因为目前我们还仅仅完成了视图部分的工作,还需要让视图中的对象和视图控制器的对象之间建立连接,并添加相应的逻辑,才能实现。

iPhone应用程序 Say Hello实例操作

小结:关于iPhone应用程序 Say Hello实例操作 (中篇)的内容介绍完了,希望本文对你有所帮助。请继续阅读 iPhone应用程序 Say Hello实例操作 (下篇)

责任编辑:zhaolei 来源: 博客园
相关推荐

2011-07-19 10:42:41

iPhone 应用程序 模型

2011-07-19 11:12:07

iPhone 控制器

2011-07-26 11:13:15

iPhone PXL

2011-07-26 16:43:59

iPhone Web 服务器

2011-07-21 10:47:37

iPhone Cocoa 委托

2011-07-26 13:23:14

iPhone 图片 相册

2011-07-26 10:09:08

iPhone 多语言 国际化

2011-07-26 09:41:23

iPhone xcode Mac OS X

2010-08-27 10:41:41

iPhone核心应用程序

2011-07-20 15:58:58

iPhone 应用程序 生命周期

2011-07-27 17:30:40

iPhone Locate 定位

2011-07-19 14:36:32

iPhone

2011-08-05 13:49:53

iPhone 应用 开发

2011-08-12 14:54:45

iPhone委托

2011-07-21 15:56:32

iPhone 截屏

2011-07-06 16:25:10

iPhone 程序 调用

2012-05-24 15:49:35

HTML5

2011-08-10 09:31:33

开发iPhone应用程

2011-07-26 16:33:56

iPhone Delegate

2011-07-28 13:59:40

iPhone App
点赞
收藏

51CTO技术栈公众号