【Cocoa(mac) Application 开发系列之一】创建第一个application—计算器

终于HTTP与Socket服务器以及cocos2dx之间的通信各种框架成功完成后,现在抽时间学习下mac下的cocoa application,当然啦 主要用于做编辑器。

很多童鞋问我为什么不用swing swt等Java的编辑器,这样能跨平台。其实对于java写编辑器呢,Himi在还没有接触ios平台之前做android时自己已经写过java的地图编辑器和简单动作编辑器。当然啦比较简单,不使用Java进行编写编辑器的原因主要有三点:

1. 基于Cocos2dx做游戏了,基本上就用不到windows系统了。

2. 不管哪个平台的编辑器,其实都是一样的,写出的数据文件哪个平台都能正常解析出来的。

3. 个人原因吧,Himi喜欢mac下的东东,而且呢,基本上Himi 的工作期间99%都在mac下,虽然装有双系统,各种切也不方便哈哈;

ok,不扯了,那么本篇简单入门下Cocoa application吧;

首先安装Xcode,这个东东,神器一样的东东不解释;

OK,打开Xcode,创建一个项目;如下图:

一路下去后我们创建好了第一个cocoa application,虽然是个空项目,但是基本的Menu和window 已经自带了。

OK,首先在AppDelegate.h 和AppDelegate.m 下编写一点小代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
//
//  AppDelegate.h
//  CountApp
//
//  Created by Himi on 12-6-3.
//  Copyright (c) 2012年 Himi. All rights reserved.
//
 
#import <Cocoa/Cocoa.h>
 
@interface AppDelegate : NSObject <NSApplicationDelegate>
{
 
    IBOutlet NSButton *btn1;
     
    IBOutlet NSButton *btnResult;
     
    IBOutlet NSTextField *tfShow ;
     
    IBOutlet NSTextField *tfResult;
     
     
}
@property (assign) IBOutlet NSWindow *window;
 
-(IBAction)btnPress:(id)sender;
 
@end
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
//
//  AppDelegate.m
//  CountApp
//
//  Created by Himi on 12-6-3.
//  Copyright (c) 2012年 Himi. All rights reserved.
//
 
#import "AppDelegate.h"
 
@implementation AppDelegate
 
@synthesize window = _window;
 
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
    // Insert code here to initialize your application
}
 
-(IBAction)btnPress:(id)sender{
     
    if(sender == btn1){
         
        NSString *str = [NSString stringWithFormat:@"%@%@",[tfShow stringValue],@"1"];
         
        [tfShow setStringValue:str];
         
    }else if(sender == btnResult){
         
        [tfResult setStringValue:[tfShow stringValue]];
         
    }
}
 
@end

简单说下代码:

1 . NSButton — 按钮 ;

NSTextField  文本条;

2.  IBoutlet :一般都说叫“插座变量”,Himi则喜欢说“仍”来形容;比如 IBOutlet NSButton *btn1 说通俗些就是把 btn1这个对象从代码中扔出来,能让我们的Interface Builder识别;

3. IBAction :动作,如果一个方法返回值是IBAction,则表示这个方法是由IB 界面的对象触发;

OK,下面接着打开MainMenu.xib文件:

a) 刚才就说啦,xcode为我们生成项目时,已经把基础的window和Menu都创建好了,而且启动项目后执行main.m入口函数中会默认加载这个MainMenu.xib文件啦;

b) 这里Himi简单加入了12个Button(Push Button)和两个TextField,还有一个image well做背景;如下图:

OK,然后要做的只有两步,首先在选中你左侧的 App Delegate如下图:

然后看你的项目最右侧Utilities窗口:

在这里你就可以看到你之前在代码中扔出来的一些对象和方法了。比如btn1,tfResult, 方法btnPress等,那么细心的童鞋可能看到有个btn后面是个“!”感叹号,这个表示对应的对象找不到了,因为大家看到之前代码中根本没有对应扔出所谓的btn,原因是之前Himi的NSButton对象是起名字btn,后来改名字了,所以这里提醒了,大家这里要注意下;

然后将我们这些扔出来的对象跟你想对应控件关联一下吧,加入这里我们连接btn1,如下图:

其他的大家按照此方式连接吧,函数也一样哦,如果你想让你的btnPress函数接受哪些控件触发后相应次函数,那么也一样连接就OK啦。

当然除此之外有个简单的连接方法,就是hold住你的control键,然后鼠标点击xib中左侧App delegate然后move到你想关联的组件,然后松开鼠标选中你希望连接的代码中扔出来的对象即可;如下图所示:

那么这里Himi只是简单的将btn1,btnResult,和两个textfield进行关联,用于简单的演示,并没有把这个计算器也完整。。。大家不要这里吐槽我什么标题党 – -。真没必要写完整,写完整了就是浪费时间不是么~ 要效率学习哈哈;

OK,回头分析下AppDelegate代码:

在 -(IBAction)btnPress:(id)sender{}函数内;

首先判断响应的组建是否是btn1,如果是OK,让刚才在xib中最上面的textfield(tfShow)显示出来,如果响应的是btnResult(“=”等号)那么我就让tfShow用户输入的都打印到我们window最下方的textfield(tfResult)上;

OK,下面是这个简单application的演示截图:

http://www.himigame.com/mac-cocoa-application/893.html的更多相关文章

  1. MAC COCOA call command 调用终端控制台程序

    MAC COCOA call command 调用终端控制台程序 STEP 1 先写一个C++ DOS程序 STEP2 使用NSTask来运行,然后用NSPipe和 NSData来接受运行的结果字符串 ...

  2. How an Event Enters a Cocoa Application

    How an Event Enters a Cocoa Application An event is a low-level record of a user action that is usua ...

  3. ios/mac/COCOA系列 -- UIALertVIew 学习笔记

    最近在学习ios开发,学习的书籍<ios7 Pragramming cookbook>,做笔记的目的以后方便查看.笔记形式是小例子,将书上的例子书写完整. UIAlertViewClass ...

  4. MAC COCOA一个简单的多线程程序

    功能: 实现多线程:2个线程同一时候工作,一个用时间计数器.一个用来信息打印 STEP1 XCODE ->New Application ->Cocoa中的Command Line 自己主 ...

  5. mac下使用glew库,方法

    mac下使用glew库,方法 分类: OpenGL2015-01-15 15:52 210人阅读 评论(0) 收藏 举报   目录(?)[+]   主要参考http://www.cnblogs.com ...

  6. 《苹果开发之Cocoa编程》挑战1 创建委托 练习

    <苹果开发之Cocoa编程>第4版 P87 新建一个单窗口应用程序,设置某对象为窗口的委托,当用户调整窗口尺寸时,确保窗口高度为宽度的2倍. 需要实现的委托方法为:-(NSSize)win ...

  7. MAC OS下使用Xcode进行GLSL编程的配置过程

    整理自之前使用的163博客原创文章. GLSL项目中需要使用GLEW库,因此先要安装GLEW库和在Xcode中配置GLEW.要使GLEW在Xcode中被正确链接,又需要通过MacPorts来安装GLE ...

  8. Cocoa包管理器之Carthage详解及CocoaPods中心化+Carthage的二进制化

    上篇博客详细的聊了CocoaPods的相关内容,今天我们就来介绍另一个Cocoa的包管理器Carthage.在上家公司用Swift开发工程时,用的就是Carthage.Carthage诞生于14年11 ...

  9. Qt Setting Application Icon

    Qt4 设置应用程序图标 将一个ico图标放在资源文件夹下; 然后建立txt,输入 IDI_ICON1 DISCARABLE "myico.ico"; 保存文件,将其后缀改为.rc ...

随机推荐

  1. bugku 字符正则

    字符?正则? <?php highlight_file('2.php'); $key='KEY{********************************}'; $IM= preg_mat ...

  2. Python升级3.6 强力Django+Xadmin打造在线教育平台

    第 1 章 课程介绍 1-1 项目演示和课程介绍: 第 2 章 Windows下搭建开发环境 2-1 Pycharm.Navicat和Python解释器的安装: Pycharmhttp://www.j ...

  3. CentOS环境安装JDK(二)

    安装JDK-7u79-linux-x64 打开虚拟机,进入终端: 1.假设用户名是tianjiale(则需要进入管理员角色,既root) (1).将用户名tianjiale添加到sudoer列表中 提 ...

  4. mongoDB 常用操作CRUD

    1.显示所有的数据库 show dbs   2.切换数据库(如果没有数据库,即是创建数据库) use 数据库名称   3.显示所有的表 show tables   4.查看数据库里的表 show co ...

  5. LTE:上行调度请求(Scheduling Request,SR) LTE:下行资源分配类型

    http://blog.sina.com.cn/s/blog_927cff010101a7yh.html 上行调度请求(Scheduling Request,SR) 如果UE没有上行数据要传输,eNo ...

  6. Linux之JDK在线安装及配置

    1.查找java相关得列表  yum -y list java*2.在线安装 yum -y install java-1.6.0-openjdk*3.查看安装目录  ls -l /usr/lib/jv ...

  7. clone项目到本地

    clone项目到本地 1.然后在本地建立接受代码的文件夹,然后cd 到这个目录 (克隆版本库的时候,所使用的远程主机自动被git命名为origin.如果想用其他的主机名,需要用git clone命令的 ...

  8. 好用的在线pdf转化器

    https://smallpdf.com/cn/compress-pdf

  9. 页面加载时给的子元素的第一个元素加class

    HTML代码: <div id="xiao"> <ul> <li></li> </ul> </div> js ...

  10. Java IO 小结

    Java IO 的学习需要明白流设计的体系结构,这样才能在实际需要的时候,通过API文档查阅,快速实现功能.