按照我的个性,不会把Hello World写好几遍,但是Mac开发确实和一般的开发过程有点不太一样,说一般,可能是因为我用Windows用太久了吧,对事件和消息模式感到特别的熟悉,但是对Mac的连接模式,感觉还是有点怪怪的,所以在做Mac下的应用程序开发的时候,还是花了一点时间,所以,刚好有空,就纪录一下。由于HelloWorld和iPhone前面说的差不多,所以这里顺带还会说一下事件。
同样,还是打开XCode,但是我们这里创建的是一个Mac应用程序,如下图。

这里,我们创建一个HelloWorld应用程序,创建完成之后,我们就能够看到一个非常熟悉的XCode界面。

虽然我们有XCode这个IDE帮助我们开发Mac应用程序,而且好像看上去和开发iPhone应用程序差不多,这个时候你说不定已经开始摩拳擦掌了,但是可惜的是,在开发一个Mac的Hello World应用程序,并执行一个事件还不是那么容易的问题,当然,这个时候如果我们退缩了的话那就永远写不了一个HelloWorld程序了。
首先,我们打开MainMenu.xib这个文件,首先我们还是会看到熟悉的Interface Builder。

我们做主界面如上图所示即可,上面一个TextField,下面一个Button。一个非常简单的应用程序,我们想做的是当单击按钮,在文本框中显示Hello World。这个时候,可能有iPhone开发经验的你会想我们是不是要加一个Controller,是View还是什么呢?其实iPhone开发和Mac开发有一些相同的地方,但是Mac开发还是有一些复杂的,这里我们首先要创建一个文件,并取名叫MainController。

我们分别在文件的头文件和代码文件中编写如下代码,加粗的是后来加上的意思。头文件如下(注意,我们这里也可以不用创建继承自NSView的类,直接继承NSObject也可以):
@interface MainController : NSView {
IBOutlet NSTextFieldCell *textbox;
} @property (nonatomic,retain) NSButton *button;
@property (nonatomic,retain) NSTextFieldCell *textbox; - (IBAction)buttonClicked:(id)sender;
@end
上面代码想做的事情已经很明显了,现在我们在代码文件中实现如下代码:
@implementation MainController
@synthesize button;
@synthesize textbox;
{
textbox.title = @"Hello World";
} - (id)initWithFrame:(NSRect)frame {
self = [super initWithFrame:frame];
if (self) {
// Initialization code here.
}
return self;
} - (void)drawRect:(NSRect)dirtyRect {
// Drawing code here.
}
@end
上面的代码很容易理解吧,就是定义一个变量,但是难的是如何去连接这些东西,这也是我觉得Mac里面最麻烦的一个事情。
首先,我们打开Interface Builder然后在Library中拖动一个新的Object到nib中,如下图。

拖动完成之后,我们更改这个Object的Class名称,让它映射到相应的Controller上面去。

我们将相应的类的名称更改为我们刚才创建的Controller的名称,这样这个类就知道如何去映射代码文件了。
更改完成后,我们右键单击Main Controller,可以看到弹出的黑色的下拉菜单,里面有我们编写的button和textbox,我们连接相应的对象即可。

连接完成相应的对象之后,我们就需要连接事件了,我们单击按钮,并在事件区域找到相应的事件,然后拖动到Main Controller中,然后指定相应的事件即可。

然后我们就连接了事件,当事件连接完成之后,我们就连接了所有的对象,需要的事件了,这样,当我们运行程序的时候,就可以实现单击按钮显示HelloWorld的需求了,虽然连接事件和代码结构比较复杂和麻烦,但是时间用久了之后,就会大概知道是怎样一个步骤了,这里我小结一下。
- 编写UI,xib文件。
- 编写Controller类,编写相应的控件的对象和事件代码。
- 连接对象和事件。
基本上经过上面三个步骤,就能够连接事件并执行相应的代码了。不过Mac开发要比iPhone开发复杂一些,下面的一些文章,我会分享一下关于使用控件的一些复杂的地方,刚好我也在自学,如果有错误的,请联系我更改。:)
[...] Mac开发 – Hello World和事件响应 [...]