いちばん簡単なCocoaアプリケーションを作ることから始めましょう。
ボタンを押すと「Hello Cocoa World」と表示するアプリケーションを作ってみましょう!
Xcodeを起動して、新規プロジェクト(Cocoa Application)を作成してください。
プロジェクトの名前はお好きなものを。「Hello」とか。
作りました!
プロジェクト名は決めうちで指示したほうがいいんでないすかね
お好きな物をよりは…。プロジェクト名はけっこういろんなとこに波及するし…。
じゃあ「Hello」で!
つくた!
MacOS > Cocoa Applicationで良いのですね?
そうですー
じゃあインターフェースを作りましょう
ふむふむ
インターフェースビルダーを立ち上げるのですか?
Xcode上で、MainMenu.xibをダブルクリック!
虹色のぐるぐるが…
あ、なんかでてきましたYO
インターフェースビルダーが起動したでしょ
MainMenuってのとWindowってのがでてきましたよテクさん
全部英語です!
すぐ慣れますよー
だとよいのですが…
メニューのToolsから、Libraryを選んでください
開きましたっ!
Libraryというタイトルのパネルが開きましたよね
開きますた
そのパネルから、必要な部品をWindowへドラッグ&ドロップするんです
ほほぅ
まずはボタンを。
ボタンはなんかたくさん種類がありますよっ!
どれがよいんでしょうか
NSButtonと書いてるやつならどれでもいいんですが、まあ一番左上のやつを。Push Buttonってやつかな
それをドラッグしてWindowの上にのっけるんですか?
そうそう
そうそう
緑色の+マークがでてのっかりました!そうそうが多いですね
うふ
次はテキストフィールドです。
ほほぅ
部品を探すときは、パネルの下の検索フィールドが便利です
textと入力してみてください。
なんかでてきましたYO
Text Fieldでよいですか?
名前にtextを含む部品だけに絞り込まれたわけです
Labelっていうのにしましょうか。
はっつけました!
ボタンはNSButton、テキストフィールドはNSTextFieldというオブジェクトです。
ふむふむ
さてこのアプリケーションでやらせたいことは、
ボタンを押したときに、テキストフィールドに文字を表示させるという動作であります。
ここでそれを言うんですね!最初に言わないであえて!
実物を見ながらのほうがイメージしやすいと思いますので。
ふむふむ!
ボタンは、押されたときに、指定されたオブジェクトにメッセージを送るという働きをします。
メッセージってなんでしょう…
今回の場合、指定されたオブジェクトというのはLabelの事ですね!?
いえ、違うんですよそれが
ばかなっ!!!
実は、もう1個オブジェクトがいるんです
いまから自作するんです
!
自作すると、好みの動作をさせるコードがいくらでも書けるでしょ
オブジェクトを作るってことですね!
さて今回はどんな動作かというと
「ボタンが送ってきたメッセージを受け取ったときに、テキストフィールドに文字列を書き込む」という動作ですね。
メッセージを受け取って、文字列を書き込むオブジェクトってことですか先生
そうですー
さて作りますよー。Xcodeに戻ってちょ
戻りました!Xcodeに!
左の「グループとファイル」欄の中の、Classesを選択してください
なんも表示されません!
Classesフォルダはいま空っぽですからね。
はい!空っぽです!
メニューからファイル>新規ファイル...を選択して
Cocoa>Objective-C classを選択。
ファイル名と保存場所をきかれました!
ファイル名は、AppController.mにしましょう。
同時に.hファイルも作成しますかってチェックはどうしましょうか
保存場所は自動的にこのプロジェクトになってるはずなので、そのままでよいです
.hファイルも必要なので、チェックしてください。
ファイルが2つでてまいりました
Classesフォルダの中にできましたよね
いいえ!
Helloの直下にできてます!
あ、ファイル作成の直前に、Helloが選択されちゃってたんですね
じゃあその2つのファイルを、Classesフォルダへドラッグしといてください
この2つのファイルはClassesに入れていいのですね!
入りました!
さて.hファイルのほうを選択してくださいな。
なにやらソースが出ましたか。
でてきましたYO
{ }の中に、このクラスの変数を定義します。
@interface AppController : NSObject {
から始まるやつの中ですか?
そうですそうです。その中に、
IBOutlet NSTextField *field;
と書いてください。
これはどういう意味ですか先生
変数fieldは、NSTextFieldクラスへのポインタを保持するという意味です。
変数fieldは、NSTextFieldクラスへのポインタを保持するという意味です。
2回言いましたね先生
IBOutletは、インターフェースビルダー用の目印になります。
これは、和田のスクリプトのバグですね先生。
重要なことなので2回言ってもいいかと!w
書きましたよ先生!
そしてもう1個、}と@endの間に、
- (IBAction)push:(id)sender;
と書いてください。
これはどういう意味ですか先生
このクラス専用の関数の宣言なんです。クラス専用の関数を、メソッドと呼ぶんですが、
ふむふむ
さっき言ったメッセージというのは、じつはメソッド呼び出しということなんです。
つまりですね
メッセージを受け取る=メソッドを呼び出される ってことですか?
そうです。
「ボタンが、push:メッセージを、AppControllerクラスに送る」
IBActionというのはインターフェースビルダー用の目印ですか?
これはつまり「AppControllerクラスのpush:メソッドが呼び出される」ということです。
そうです>IBAction
IBはインターフェースビルダーの略なんですね!
そうですね!
さてここでAppController.hを保存してください。
保存しましたっ!
そしてインターフェースビルダーへGO!
ひらきましたよ!
ではLibraryパネルから、
Objectっていう部品を探してください。
青い立方体です。
ありますた!
それを、今度はWindowじゃなくて、MainMenu.xibのほうにドラッグ&ドロップしてください。
目に見えないオブジェクトは、こっちに格納します。
ふむふむ
目に見えないものも扱えるのですねインターフェースビルダーは
そうなんですー。単にうわべだけじゃないんです。
うわべだけじゃないなんて、和田みたいですね先生
そうそう
さて次に
メニューからTools>Inspectorを選んでくださいな
サクッと流されたっ!
うふ
開きましたインスペクター?
パネルが出ましたね
でましたねなんか
最初に出したLibraryパネルとInspectorパネルは、ずっと出しっぱなしにしといてください。
へいっ!
Inspectorパネルでは、各オブジェクトの細かい設定をしますです。
へい!
さてさっきドロップしたObjectを選択しといて、
MainMenu.xibの中のやつですね
はい
で、Inspectorパネルの、上のタブ?の、右から2番目、iっていうやつをクリック
クリックしたぜ
パネルのタイトルが、Object Identityになってますか
なってます!
ではClassの右のポップアップメニューっていうんですか、それをクリックして、AppControllerを選んでください。
セレクトボックスですね一般的には
そ、そう言うんですね…
AppControllerを選択するとなかペロッとでてきましたよ先生
今日はなんか超大作ですね先生w
そうですね…
ActionとOutletのところになんか表示されましたよ!
そうです。.hファイル内で、IBActionとIBOutletという目印は、ここで効いてくるんです。
なるほどね!
さて次が肝心なんですが、オブジェクト同士をつなぎますよ。
ふむふむ
Window上のボタンをctrlキーを押しながら、AppControllerまでドラッグ。
いつのまにかObjectってのがAppControllerに変わってた!
そうなんです。
なんか青い線がピロッとでてきてつないでみました
黒い小窓が現れるので、push:をクリック。
クリックしました!
これで、ボタンを押したときにpush:メッセージがAppControllerに送られることになります。
次に、AppControllerからテキストフィールドへ、同様にctrl-ドラッグ。
今度は向きが逆です。
そして現れた小窓のfieldをクリックです。
クリックしてやりましたよっ!
これで接続は完了です!
ほほぅ!
インターフェースビルダー上で、保存しといてください。
で、Xcodeにまた戻りますー
今からpush:メソッドを実装します。
戻りました
ふむふむ
実装は、.mファイルに書きます。AppController.mを選択してください。
開きましたぜ
@implementationと@endの間に、次のように書いてください
どきどき
4行あります。
- (IBAction)push:(id)sender
{
[field setStringValue:@"Hello Cocoa World"];
}
以上です!
複数行書けた方がよいですねw
- (IBAction)push:(id)sender
これはさっき.hに書いたのと酷似してますが
ええ
関連性はあるんでしょうか
.hでは宣言、.mでそれを実装、という構造ですね
変数宣言と同じようなものでしょうか
そうですね、.hでは関数(メソッド)の宣言ですね
なんとなくわかってきたような気がしますね!
[field ...の部分は、また次回解説しましょうかね・・
これで準備完了です!
え”〜w
ビルドしても良いでしょうか…
簡単に言うと、オブジェクトfieldに、setStringValue:メッセージを送る。その引数は@"..."、ということですね
ビルドの前に、ちょっとだけ、、
へ、へい
インターフェースビルダーに戻って、Labelのサイズを、広げといてください…
やっぱりw
Helloしかでないからおかしいなと思いましたよっw
全部見えないと悲しいから…
無事ボタンを押すとHello Cocoa Worldが表示されましたよっ!
ハアハア
できましたね!
ハァハァ
今日の作業を何度かやって慣れてみてくださいな!
OK牧場!
iPhoneでもなんかできる気がしてきたんで
iPhoneで同じような事をやらせてみますよっ!
うふ
今回のでインターフェースビルダーとクラスとの繋がりがより理解できた気がしますよっ!
最初の壁を越えましたね!
あざっす!