Apple Mac cocoa入门级教程- HelloWorld!

Apple Mac cocoa入门级教程- HelloWorld!,第1张

概述cocoa教程1 - HelloWorld ! 来源:www.CocoaDev.cn 首先, 使用Xcode来创建一个新的project. 这里假设你已经安装了开发工具. 如果还没有, 可以用开发光盘或者系统光盘安装, 或者在http://connect.apple.com注册免费下载. - 打开Xcode, 它的默认安装路径是 /Developer/Applications/ - File菜单 @H_404_0@ @H_404_0@

cocoa教程1 - HelloWorld !
来源:www.CocoaDev.cn


首先,使用Xcode来创建一个新的project. 这里假设你已经安装了开发工具. 如果还没有,可以用开发光盘或者系统光盘安装,或者在http://connect.apple.com注册免费下载.

- 打开Xcode,它的默认安装路径是 /Developer/Applications/

- file菜单 : New Project...

- 选择 "Cocoa Application" 这个模板. 一开始常用的两个模板就是这个和 "Cocoa document-based Application". 后者适用于具有多个相似窗口的应用程序,比如文本处理器.

- 点击 "Next"

- 输入一个Project名字 (默认的路径是你的用户目录,这个没什么问题). 输入 "HelloWorld" .

- 点击 "Finish".

- 这时你的 project 窗口就出现了.

- 现在看看产生了哪些文件. 在左边一栏,点击 "Classes","Other Sources",和 "Resources" 左边的小箭头.
Classes 现在应该是空的. 你可以在这里创建新的类文件. 对于大的project,可以生成更多象这三个这样的组别,以便于管理,不过现在这样就好了.
Other Sources 里面是默认的 "main.m" 文件和另一个 "HelloWorld_Prefix.pch". 大多数时候你不用修改这两个文件. "main.m" 里面是应用程序的入口.

Resources 里有三个文件:
Info.pList 应用程序的设置文件,应用程序名,版本号,图标名等可以在这里设置,现在用默认的就行了.
MainMenu.nib,是一个 InterfaceBuilder 文件,用于存储所有界面项目. 后面会说到.
InfoPList.strings,含有关于系统信息的字符串,如果打开看就一目了然了.
后两个左边也有个小箭头,这是因为本地化的相应的文件要分别加入到这两个组别.

- 现在尝试编译并执行,可以点击窗口上面的 "build and go",或者使用 Build 菜单里面对应的命令.

在一阵短暂的时间后会出来一个空的窗口. 现在退出这个新的 Hello World 应用程序.

使用 Interface Builder 来定义用户界面

在这一步,我们用 Interface builder 来轻微改变一下界面.

- 首先双击 Xcode 里面的 MainMenu.nib . 这就会启动 Interface Builder 并打开这个 .nib 文件.

- 看看这个 "MainMenu.nib" 窗口. 这就是刚刚打开的文件. Interface builder 应该也打开了它的两个项目: "MainMenu",和 一个空的 window (对应于 MainMenu.nib 里的 Window).

- 现在改一下 MainMenu. 点击第一个菜单,并将所有的"NewApplication" 改为 "HelloWorld".

你可以更改其他的菜单,如果需要的话,或者删除一些,因为他们在这个教程里用不上,但是也没有害处,就保留在那吧.

- 现在在点击窗口 window,往里添加一些东西. 如果它不在桌面上的话,双击 "MainMenu.nib" 里面的 "window" 使它出现.

在 "Tools" 菜单里,选择 "Attributes Inspector" 出来一个新的面板,叫 "Window Attributes".

- 更改 window 的标题为 "Hello World". 在 "Window Attributes" 的 "Title" 一栏编辑.

- 调整这个窗口的大小,把它弄小一点.

- 在 "Window Attributes" 里去掉 Resize 左边的勾,这样程序的用户将不能改变窗口的大小.

- 现在点击 interface builder 一开始打开的一个 library 面板,点开 Cocoa,选择 VIEw & Cells.

- 滚动右侧移动条,使出现 "Label",将其用鼠标拖到 window 中. 双击这个Label来修改其文本内容.

- 有兴趣的话,可以在 window 里添加其他的东西.

- 使用 "Command-R" 快捷键可以立刻查看界面的效果

- 输入 "Command-Q" 退出测试模式.

- 存储这个改动并退出 Interface Builder.

Back in Xcode (回到Xcode)

- 现在点击 "Build and Run" 按钮. 你这样就可以看到 MainMenu 里面的改变以及 window 里面的内容.

- 如果退出Xcode,编译好的程序可以在project目录的build目录里找到.
就这些了吗?

是的,对这个教程而言,是这样. 当然,这个教程并没有展示多少,但希望能帮你看到使用苹果的工具和Cocoa能很容易的创建真的不错的用户界面.

可以自己熟悉一下用户界面里可以使用的各种控件. 虽然暂时不知道怎么使用,但是以后会接触到.

下一个教程将增加objective-C代码,并介绍 Outlets 和 Actions. 

cocoa教程2 - Outlets 和 Actions

第一步是连接

- 首先用Xcode生成一个新的 project,取个名叫 Electricity.

- 双击 project 里的 "MainMenu.nib",启动 Interface Builder.

- 从 library 面板里拖下面的控件到 Window 窗口里,是一个滑动条和一个文本编辑框.

- 如果现在保存并执行这个应用程序,会发现这两个部件已经能工作. 不过你肯定想做一些比这更多的,比如在文本框里显示滑动条的数值.

要做到这个,在按住Ctrl的同时,左键点住滑动条,拖动鼠标到文本框上,然后放开鼠标. 屏幕上会出现一个连接菜单.

- 在 "Received Actions" 里选择 takeIntValueFrom. 这是告诉文本框从滑动条获得整数值,就是指针所在位置.

- 保存并测试这个应用程序,现在文本框显示的是滑动条的指针位置的数值.

一个控制部件

- 现在进一步,在窗口里添加下面的两个部件,一个按钮,一个标签:

- 这里想要做的是让下面的标签显示滑动条的指针位于左边还是右边. 要做到这个,必须增加一些代码 (哈哈,终于要动手写了).

- 首先要创建一个控制 "controller" 物件. 象它的名字说的那样,这个 controller 是用来控制窗口里发生什么的. 如果想知道一些更详细的介绍,苹果的文档是个好的阅读资料,读读关于 MVC (Model / VIEw / Controller),(模型 / 视图 / 控制器) 的部分. 本教程暂时不去理会这些.

在 library 面板里点开 Cocoa 后,选择 Objects & Controllers. 拖动一个 "NSObject" 到 MainMenu.nib 窗口里. 这是根物件 root object,我们的 controller 物件只需从它继承一些通用的性质即可.

在 Tool 菜单里选择 IDentity Inspector,在出现的 IDentity 面板里在 class 那一栏输入 "ElectricityController"

- 然后添加两个 outlets 和一个 action. Outlets 便于你在代码中访问其他部件,它相当于函数编程里一个传递数据的指针类型参数. Actions 是一个被某个事件(比如点击一个按钮)激活的方法,也就是本控制器可以被外界调用的一个函数.

- 添加下面的 outlets 和 actions:

- 接着,来编写相应的代码. 因为Xcode和interface builder在这方面的同步不是很好,我们的方法是先到Xcode里,选择 file 菜单里的 New file,然后在出来的窗口里选择Cocoa里面的Objective-C Class,接下来输入 "ElectricityController.m" 作为这个新建立类的文件名,点击 finish 结束,在project的class一组可以看到新增加俩个代码文件. 然后回到 interface builder,点击选择 MainMenu.nib 里的 "ElectricityController",接着在 file 菜单里选择 write class file,在出现的窗口里,默认路径应该是本project的路径,如果不是,请选择回来. 然后点击 Save 保存. 下面会提示你要 merge 合并,还是 replace 替换,选择 replace.

- 现在回到Xcode,双击打开新增加的那两个文件,你会看到下面的代码已经在里面了.

复制内容到剪贴板 代码: #import <Cocoa/Cocoa.h>

@interface ElectricityController : NSObject {
    IBOutlet ID textZone;
    IBOutlet ID topSlIDer;
}
- (IBAction)wherebuttonAction:(ID)sender;
@end
复制内容到剪贴板 代码: #import "ElectricityController.h"

@implementation ElectricityController
- (IBAction)wherebuttonAction:(ID)sender {
   
}
@end

第一个是头文件,含有这个类的定义,第二个含有实现这个类的代码,现在基本是空的.

- 现在回到 interface builder,来做必要的连接,还记得按住ctrl,然后左键点击并拖动鼠标进行连接吗?

从 ElectricityController 到滑动条 : 选择 topSlIDer 这个 outlet.

从 ElectricityController 到最下面的文本标签 : 选择 textZone 这个 outlet.

从 按钮 到 ElectricityController : 选择 Received Actions 里的 wherebuttonAction.

让我们来修改代码

- 在 interface builder 里点击 file 菜单,选择 Save 保存. 回到Xcode来修改 ElectricityController.m 双击打开它.

- 我们要修改点击按钮所发生的事件,这将用到前面建立的 action.

用下面的代码替换 -wherebuttonAction

复制内容到剪贴板 代码:         - (IBAction)wherebuttonAction:(ID)sender {
            if ([topSlIDer intValue]<50)
                [textZone setStringValue:@"Cold"];
            else
                [textZone setStringValue:@"Hot"];        
        }

如果还没有,现在是时候你要认识一下 Objective-C 语言了. 比如去苹果网站阅读一下相关的文档.

那么,这些代码是做什么呢?

复制内容到剪贴板 代码: if ([topSlIDer intValue]<50)

第一行是问滑动条的数值是多少,并与50进行比较

复制内容到剪贴板 代码: [textZone setStringValue:@"Cold"];

如果小于 50,设置文本标签的内容为 Cold. @"Cold" 代表一个 Nsstring 类型的字符串常数.

复制内容到剪贴板 代码:             else
                [textZone setStringValue:@"Hot"];

否则做同样的事情,但是显示 "Hot".

试试你的应用程序!

- 点击 Build and Run 按钮测试你的代码!

新Project

先创建一个新的project :

启动 Xcode
file 菜单 : New Project
在对话框里,选择 "Cocoa Application"
点击 Next
Project 名 : POPreferences
点击 Finish

现在来设置一个 preference 预置文件:

点击 Targets 组别左边的小箭头
双击里面的 POPreferences
点击 PropertitIEs
在 IDentifIEr 一栏,输入 "org.projectomega.popreferences",或者其他你喜欢的. 应用程序的预置设置将存储在一个名为这个的pList文件中,该文件的默认路径是 ~/library/Preferences/

这里使用的是 java类型的规则来命名这个 preference 预置文件,这也是苹果推荐的 (某种程度是URL地址反过来写). 这样做主要的一个好处是 preference 文件将会按出品公司归在一起.

使用 Interface Builder 来设计

现在来设计本教程要用到的对话框.

在 Xcode 里展开 "Resources" 组别
双击 MainMenu.nib 启动 Interface Builder 打开它.
把你的窗口改成象下面的样子. 这包括大多数 preferences 要用到的控件. Radio控件默认是2个供选择项,可以在Attributes Inspector里的Cells一栏改成需要的数目. 另外,需要在 Radios 每一项的Attributes Inspector里设置它们的tag分别为:0,1,2,3,对应于 Radio 1,Radio 2,Radio 3,Radio 4,在后面将用到. 要选中单独的某个 Radio 项,可能需要点击几次对应项,直到这一项被高亮显示.

创建 Outlets/Actions

现在要为这个对话框生成一个 controller 物件,并添加 outlets/actions,用前一个教程里同样的方法.

点击 library 面板
拖动一个 NSObject 到 MainMenu.nib 窗口内
在IDentity面板里命名class为 " PrefController "
添加5个 outlets (每个控件一个) 和 2个 actions,并按下图命名:

现在,创建 PrefController 类:
象上个教程里一样,先回到Xcode,
file 菜单,New file,选择 Objective-C Class,命名为PrefController.m,finish完成,生成 PrefController.h and PrefController.m.
再回到 Interface Builder,确认选择 MainMenu.nib 里的 PrefController,然后
file 菜单,Write class file,选择project所在路径(如果默认值不是的话),之后 replace 替换.
现在Xcode里面这两个新文件应为以下内容:

复制内容到剪贴板 代码: #import <Cocoa/Cocoa.h>

@interface PrefController : NSObject {
    IBOutlet ID PrefEdit;
    IBOutlet ID PrefPopup;
    IBOutlet ID PrefRadios;
    IBOutlet ID PrefSlIDer;
    IBOutlet ID PrefSwitch;
}
- (IBAction)PrefRestoreAction:(ID)sender;
- (IBAction)PrefSaveAction:(ID)sender;
@end
复制内容到剪贴板 代码: #import "PrefController.h"

@implementation PrefController
- (IBAction)PrefRestoreAction:(ID)sender {
   
}

- (IBAction)PrefSaveAction:(ID)sender {
   
}
@end
连接 Outlets/Actions

回到 Interface Builder 来连接 actions 和 outlets 到不同的部件,还是使用 ctrl+鼠标拖动.
从 "Restore" 按钮到位于 MainMenu 里的 " PrefController ",选择Receive Actions里的PrefRestoreAction

同样的,连接 "Save" 按钮到" PrefController "的 PrefSaveAction
再从 PrefController 连接 outlets 到相应的部件. 最后Connection Inspector面板里应该显示如下:

最后从 "file's Owner" 连接到 " PrefController",并选择 delegate 委托. 这样关于应用程序开始,关闭等等的信息就会通知 PrefController,方便我们使用对应的委托方法去处理这些信息,比如本project的预置值的读取和存储比较适合于这些时候处理.

头文件

保存并退出 Interface Builder,回到 Xcode 添加代码 !
将 IBOutlet 的类型ID细化为相应的具体类型是一个好习惯,所以将 " PrefController.h" 文件改成下面的样子: 复制内容到剪贴板 代码: #import <Cocoa/Cocoa.h>

@interface PrefController : NSObject
{
    IBOutlet NSTextFIEld*   PrefEdit;
    IBOutlet NSPopUpbutton* PrefPopup;
    IBOutlet NSMatrix*      PrefRadios;
    IBOutlet NSSlIDer*      PrefSlIDer;
    IBOutlet NSbutton*      PrefSwitch;
}
- (IBAction)PrefRestoreAction:(ID)sender;
- (IBAction)PrefSaveAction:(ID)sender;
@end
真正的代码

现在来编辑 " PrefController.m". 下一节将解释细节. 复制内容到剪贴板 代码: #import "PrefController.h"

@implementation PrefController


- (voID)applicationDIDFinishLaunching:(NSNotification *)notification
{
        // 自动存储窗口位置
        [[PrefEdit window] setFrameautosavename:@"PrefWindow"];

        // 自动恢复预置值
        [self PrefRestoreAction:self];
}

- (IBAction)PrefRestoreAction:(ID)sender
{
        // 读取 preference 预置文件
        NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];

       
        // 文本框
        // 获得 preference 预置值,或者设置默认值
        Nsstring *mystr = [defaults stringForKey:@"EditFIEld"];
        // 如果 预置值,或者设置默认值不存在,生成一个
        if (mystr == nil)
                mystr = @"Empty";
        // apply the value to the dialog
        [PrefEdit setStringValue:mystr];

        // d出菜单
        // 获得 preference 预置值,或者设置默认值
        int pos = [defaults integerForKey:@"Popup"];
        // 如果 预置值,0 会被返回,也可以做为默认值
        // 将这个值应用到对话框
        [PrefPopup selectItemAtIndex:pos];

        // RAdio 按钮
        int posradios = [defaults integerForKey:@"Radios"];
        [PrefRadios selectCellWithTag:posradios];

        // 滑动条
        int slIDer = [defaults integerForKey:@"SlIDer"];
        [PrefSlIDer setIntValue:slIDer];

        // SWITCH 按钮
        int myvalue = [defaults integerForKey:@"Switch"];
    [PrefSwitch setIntValue:myvalue];
}

- (IBAction)PrefSaveAction:(ID)sender
{
        // 读取 preference 预置文件
        NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];

        // 文本框
        // 从文本框获得文本
        Nsstring* mystr = [PrefEdit stringValue];
        // 存储这个文本物件
        [defaults setobject:mystr forKey:@"EditFIEld"];

        // d出菜单
        // 获得选项值
        int pos = [PrefPopup indexOfSelectedItem];
        // 存储这个值
        [defaults setInteger:pos forKey:@"Popup"];

        // RAdio 按钮
        int posradios = [PrefRadios selectedRow];
        [defaults setInteger:posradios forKey:@"Radios"];

        // 滑动条
        int slIDer = [PrefSlIDer intValue];
        [defaults setInteger:slIDer forKey:@"SlIDer"];

        // SWITCH 按钮
        int myvalue = [PrefSwitch intValue];
        [defaults setInteger:myvalue forKey:@"Switch"];
}

@end
应用程序启动 复制内容到剪贴板 代码: - (voID)applicationDIDFinishLaunching:(NSNotification *)notification
{
        // 自动存储窗口位置
        [[PrefEdit window] setFrameautosavename:@"PrefWindow"];

        // 自动恢复预置值
        [self PrefRestoreAction:self];
       
        // 显示窗口
        [[PrefEdit window] makeKeyAndOrderFront:nil];
}
信号 "-applicationDIDFinishLaunching" 在应用程序启动时被发出,PrefController 将收到. 这是一个好的地方来恢复preference 预置值. 下面这行做的就是这些: 复制内容到剪贴板 代码:         [self PrefRestoreAction:self]; - 这也是个好的地方存储窗口位置. 并不需要写好几行代码来实现这个,Cocoa framework 框架提供了一个只需一行代码的命令来完成这个任务: "-setFrameautosavename" 复制内容到剪贴板 代码:         [[PrefEdit window] setFrameautosavename:@"PrefWindow"]; 存储 preference 预置值

- 首先,你需要读取那个 default 默认文件,它的名字在一开始就已经确定了: 复制内容到剪贴板 代码:         NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; - 从控件里获得对应的数值 (或者就是一个已经存在的 variable 变量)
- 存储这些值到 default 默认文件. 在这里,比如把 preference 的 "myvalue" 存到 "Switch" 这个 Key. 复制内容到剪贴板 代码:         [defaults setInteger:myvalue forKey:@"Switch"]; 恢复 preference 预置值

- 首先,象前面一样,你需要读取那个 default 默认文件. 复制内容到剪贴板 代码:         NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; - 接着,下面这行提取 preference 里叫 " Popup" 的值. 如果默认文件里还没有这一项,返回的值将是 0,可以接受为最初的默认值. 如果是字符串 string,对应的key不存在时返回的将是 "nil". 复制内容到剪贴板 代码:         int pos = [defaults integerForKey:@"Popup"]; - 最后,恢复的这些值可以恢复到对应的控件上.

检验你的应用程序如果一切没有问题,你会得到一个结果.
@H_404_0@ 总结

以上是内存溢出为你收集整理的Apple Mac cocoa入门级教程- HelloWorld!全部内容,希望文章能够帮你解决Apple Mac cocoa入门级教程- HelloWorld!所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1069892.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-26
下一篇 2022-05-26

发表评论

登录后才能评论

评论列表(0条)

保存