読み込んでいます...

当我们想开发基于多窗体的应用程序的时候,我们就需要使用多窗体的应用程序模板去开发,当然,这个时候我们就要去自己写一些窗体的应用开发了,所以在写多窗体应用程序开发的时候,我们首先要手动的去写一个窗体,于是我们就要创建一个Window-Based应用程序。我们按照下图创建一个Window-Based应用程序,并命名叫Window。

创建完成后我们可以看到系统给我们创建的模板的东西很少,就只有一个WindowAppDelegate.h和WindowAppDelegate.m,这两个文件,由于前面我们说了iPhone是基于MVC模型开发的,所以在这里,我们的Delegate委托只是用于调用一个Controller而已,例如前面的项目中MainWindow调用了HelloWorldController一样,只是不同的是现在我们要自己写Controller。不过,在自己写之前,我们还要更改委托类的代码。我们首先添加一个Controller,我们就命名为MainWindowController。

创建好之后,我们就可以在代码中更改如下代码了,我们可以给.h和.m代码分别更改如下(加粗为更改的代码)。

#import <UIKit/UIKit.h>

@class MainWindowController;

@interface WindowAppDelegate : NSObject <UIApplicationDelegate> {
    UIWindow
*window;
    
IBOutlet MainWindowController *mainWindow;
}

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

@end

然后编写实现的类,代码如下。

#import "WindowAppDelegate.h"
#import "MainWindowController.h"

@implementation WindowAppDelegate

@synthesize window;
@synthesize mainWindow;

- (void)applicationDidFinishLaunching:(UIApplication *)application {    

    // Override point for customization after application launch
    [window addSubview:mainWindow.view];
    [window makeKeyAndVisible];
}

- (void)dealloc {
    [mainWindow release];
    [window release];
    [super dealloc];
}

@end

这样,在开始主程序的时候会通过MainWindowController打开窗体,现在,我们要连接MainWindow.xib到我们的MainWindowController。首先我们打开MainWindowController,我们可以看到一个主窗口,打开之后我们需要为主窗口增加一个View,我们可以双击下面的View Controller图标,创建一个类似灰色图形区域的View实例。

双击上面的View控制器添加,如果双击不起作用,可以关闭当前Interface Builder然后再打开,双击后可以看到如下图所示的窗口。

当我们创建好之后,可以在身份检查器中看到该View的类的定义,而且也可以看到MainWindow.xib的控制窗体中增加了一个Main Window Controller图标,我们可以点击上面的View,也可以点击图标,然后在类定义中选择我们刚才创建的类MainWindowController,如下图所示。

更改了类名称之后,就是告诉MainWindow.lib连接MainWindowController这个类,这样这个UI就知道如何去使用类了。

这里还需要指出的是,我们这里添加了一个View的实例到MainWindow,然后更改了View这个实例的类的连接,所以我们只需要在MainWindowController下面去更改任何代码,即可以实现我们想要的效果了,如添加事件等等。我们可以看到我们的控制窗口如下。

我们右键点击File’s Owner,可以看到File’s Owner是连接自WindowAppDelegate的,而新的Main Window Controller才是我们真正需要连接的类,这里可能有点难以理解,但是必须要理解这个地方。和前面的基于View的应用程序不同,主窗体是通过AppDelegate去启动的,启动之后,我们创建了View的实例并连接到了View的类(Controller)。所以Main Window Controller才是我们的Controller对象,和单独的View的窗体不同,这点我会在后面再解释。

在连接了之后,我们还需要将deletegate连接到Main Window Controller,我们只需要按住Control然后将Window App Delegate拖到Main Window Controller即可,如下操作。

在小的灰色窗口中我们选择mainWindow,也就是我们在WindowAppDelegate中写的MainWindowController的实例,可以看前面的代码段。这样我们就连接了UI,MainWindowController和AppDelegate了,是不是感觉很难理解?确实,我自己也觉得有点难理解。

连接好之后,我们运行应用程序,就会发现,打开的窗口就是我们新写的View的实例了,在开发中,我们就为我们的MainWindow写了一个MainWindowController并连接了,这样就可以使用MainWindowController去更改我们的MainWindow的UI和相应的事件了。

总结这个步骤:

  • 创建Window-based应用程序。
  • 创建MainWindowController。
  • 更改AppDelegate代码,引用MainWindowController。
  • 打开MainWindow.lib,并增加一个新View的实例。
  • 更改新View的Class。
  • 连接Delegate到新View。

通过上面几个步骤,我们就编写了主窗口。

在编写了主窗口之后,我们才能考虑如何去编写多窗体的应用程序。

示例代码

Window.zip (559.15 kb)

610路过 1评论 iPhone开发 阅读全文..
  1. 置顶的更新,文章汇总 : GuoJing's Blog | 用心对待每一行代码 @

    [...] iPhone开发 – 多窗体应用:编写主窗体 [...]

:-D :-? 8) :cry: 8-O :lol: :-x :-| :?: :-P :oops: :roll: :( :) :-o :wink: more »