先ほどはアプリケーション起動直後にNSLogで文字列を表示させ、プログラムの動きを確認しました。いよいよ、ここから本題に入ります。
ウインドウにテキストフィールドを配置して、数値を設定するプログラムを書いてみましょう。
ここではIBOutletという重要な仕組みを説明します。
Interface Builderで認識させるために、クラスのインスタンス変数をIBOutlet宣言します。
Interface Builderでは、ウインドウ上にテキストフィールドを配置し、Controllerインスタンスとテキストフィールドをコネクション設定します。そして最後に、Outletに対するプログラムを実装ファイルに記述します。
●Controller.hにプログラムを追加する
Controller.hをエディタに表示させます。
Controllerクラスに以下のインスタンス変数を追加します。
すでにテンプレートとして#import文や@interface文が入力されていますので、背景が反転になっている行を入力してください。
▼リスト
001: #import <Cocoa/Cocoa.h>
002:
003: @interface Controller : NSObject {
004: IBOutlet NSTextField *textField;
005: }
006: @end
NSTextFieldクラスのポインタとして、textFieldというインスタンス変数を宣言しています。
宣言の前にIBOutletを記述することで、Interface BuilderでOutletと識別し、オブジェクトとのコネクション設定が可能になります。
入力を終えたらファイルメニューから「保存」を選択し、ソースコードをファイルに保存します。Interface Builderでソースコードの内容を認識させるためです。
以降、ソースコードの入力が終わったら、ファイルを保存する習慣を身に付けましょう。
●テキストフィールドの配置
ここからは、Interface Builderに切り替えて操作します。
「Window」というタイトルのウインドウにテキストフィールドを配置します。
ウインドウが表示されていない時は、xibウインドウから「Window」アイコンをダブルクリックします。テキストフィールドはNSTextFieldというクラスで、CocoaフレームワークのAppKitが提供しています。
▼図
[Library]→[Cocoa]→[Views & Cells]の階層をたどって「Inputs & Values」グループを選択します。
▼図
オブジェクトリストからText Fieldを探したら、ウインドウの上にドラッグ&ドロップします。
▼図
●Outletのコネクション設定
配置したText Fieldをヘッダファイルで宣言したtextFieldというOutletに接続します。
この操作により、textFieldというインスタンス変数がウインドウ上のText Fieldを参照することになり、textFieldに対してNSTextFieldのメソッドを呼び出すことができます。
xibウインドウにあるControllerアイコンからウインドウ上のText Fieldに向かって、controlキーを押しながらドラッグし、Text Fieldの上でマウスボタンを離します。
▲注意 : Text Fieldからドラッグしないでください。全く違う意味になります。
▼図
ポップアップウインドウに「Outlets - textField」と表示されるので、textFieldを選択します。
▼図
●Controller.mにプログラムを追加する
Xcodeに戻り、Controller.mをエディタに表示させます。
applicationDidFinishLaunchingメソッドに、テキストフィールドの数値を設定するプログラムを書きます。先ほどのNSLogの行はもう使わないので消去します。
▼リスト
001: #import "Controller.h"
002:
003: @implementation Controller
004:
005: - (void)applicationDidFinishLaunching:(NSNotification *)notification {
006: [textField setIntValue:12345];
007: }
008:
009: @end
●ビルドと実行
プロジェクトウインドウの「ビルドして進行」ボタン、またはビルドメニューから「ビルドと実行」を選択するとビルドが始まります。
▼図
▼図
何もエラーがなければアプリケーションが起動し、ウインドウ上にあるテキストフィールドに「12345」がセットされます。
▼図
●プログラムの解説
IBOutletで宣言したtextFieldは、Interface Builderでウインドウの上に配置したNSTextFieldとOutlet接続しました。つまり、ソースコードにおいては、textFieldはウインドウの上に配置したNSTextFieldを指し示すものとなります。そのtextFieldにNSTextFieldが持つ「setIntValue」という整数をセットするメソッドを呼び、引数に整数を指定することで、テキストフィールドに「12345」という値が入るわけです。
著者の中野洋一氏より読者の皆様へ
筆者が定期開催しているセミナーをベースにした、Cocoaプログラミングの入門書です。神経衰弱ゲームをテーマとした、楽しみながら学習できるような実習プログラムで解説しています。
iPhoneアプリ開発へのアプローチとなるよう、Cocoaの基礎知識で足固めをすることも本書のねらいです。