关注

添加视图控制器(UIViewController)

添加视图控制器文件

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

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

201106070549.jpg

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

201106052246.jpg

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

201106052254.jpg

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

201106070552.jpg

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

创建视图控制器实例

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

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

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

#import "RootViewController.h"

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

RootViewController *viewController;

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

@property (nonatomic, retain) RootViewController *viewController;

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

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

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

@synthesize viewController;

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

[viewController release];

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

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

RootViewController *controller = [[RootViewController alloc]initWithNibName:@"RootViewController" bundle:nil];

self.viewController = controller;

[controller release];

这段代码的作用如下:

  • 创建RootViewController这个视图控制器的实例。使用alloc方法创建一个视图控制器,然后用initWithNibName:bundle:方法对其进行初始化。init方法先指定控制器应加载的nib文件,然后指定在哪个程序包中可找到该文件。程序包是文件系统某个位置的抽象,该位置存放了应用程序将会用到的代码和资源。
  • 使用属性的存取方法,将创建好的视图控制器实例设置为viewController属性变量的值
  • 根据内存管理规则释放视图控制器

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

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

self.window.rootViewController = controller;

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

[self.window makeKeyAndVisible];

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

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

#import <UIKit/UIKit.h>

#import "RootViewController.h"

@interface SayHelloAppDelegate : NSObject <UIApplicationDelegate> {

RootViewController *viewController;

}

@property (nonatomic, retain) IBOutlet UIWindow *window;

@property (nonatomic, retain) RootViewController *viewController;

@end

SayHelloAppDelegate.m文件:

#import "SayHelloAppDelegate.h"

@implementation SayHelloAppDelegate

@synthesize window=_window;

@synthesize viewController;

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

{

RootViewController *controller = [[RootViewController alloc]initWithNibName:@"RootViewController" bundle:nil];

self.viewController = controller;

[controller release];

self.window.rootViewController = controller;

[self.window makeKeyAndVisible];

return YES;

}

- (void)dealloc

{

[_window release];

[viewController release];

[super dealloc];

}

@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文件中界面元素之间的连接,是非常重要的。

201106072252.jpg

小贴士: 在Xcode中编辑Nib文件时,可以通过点击右上角工具栏按钮

201106072256.jpg

 显示隐藏相应面板,方便对界面编辑和属性设置。

文件拥有者(File's Owner)

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

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

201106080842.jpg

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

视图插座变量

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

  1. 在Xcode的界面中,从左侧的文件组选中要查看的视图控制器的Xib文件
  2. 在视图编辑界面,点击选中 File's Owner
  3. 在 Inspector 面板,选中 Connection inspector,这里会显示文件所有者所有的插座连接
  4. 在视图编辑界面,按住Control键点击 File's Owner 或者在 File's Owner上点击右键,弹出一个黑色半透明的面板显示文件所有者的所有连接

201106090009.jpg

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

201106090039.jpg

转载自 CSDN-专业IT技术社区

原文链接:https://blog.csdn.net/GZ9401WRx/article/details/162581888

文章来源crawl

评论

赞0

评论列表

微信小程序
QQ小程序

关于作者

点赞数:0
关注数:0
粉丝:0
文章:0
关注标签:0
加入于:--