1. 程式人生 > >【Cocoa(mac) Application 開發系列之一】建立第一個application—計算器

【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 下編寫一點小程式碼:

//
//  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
//
//  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的演示截圖: