ひとりまとめ

もろもろのメモ

処理の中から画面のオブジェクトを参照する基本

またまたVisualBasicとは違うよっていうお作法の話。


VBでは画面にテキストフィールドをペタっと貼るだけでプログラムから「text1.value」なんて感じですぐに触れたのだけど、Objecitve-C&InterfaceBuilderではちょっと違う。
キーワードは「アウトレット」

アウトレットを定義する

処理の中から画面に貼ってあるラベルやテキストフィールドを参照するためには、「他のオブジェクトを参照するための変数」、つまり呼び名を決めてやる必要がある。それがアウトレット。
新しく飼うことになった犬の兄弟に、「太郎次郎以外ありえないわ。」「いやいやここは洋風にMISIA」「お父さん、それは人の名前よ!」などと名前を考えるってところか。

「こういう名前の人を呼ぶよー」という宣言なので、書くのはヘッダファイル(~.h)。書き方はいわゆる変数定義なので、テキストフィールドをtestFieldなんて名前で使いたいならこんな感じ。

IBOutlet UITextField *testField;

しかーし!これで終わったと思うなよ。宣言した後に、この変数を外から参照するためのおまじないが必要。それがプロパティの宣言だっ!(アクセサ、ミューテータと呼ばれるメソッドの定義らしい。)
家族会議で決めた名前「橋之助」を子犬にも教えるかどうか決めるってことだ。(白っこいまんまる などといったコードネームで呼び、それを本犬に知らせたくなければ不要。)

@property (nonatomic,retain) UITextField *testField;

この2つがセットになって、初めて処理の中でラベルやらテキストフィールドやらが呼べるようになる。面倒くさいけど、そういうものだってことで。

ちなみに@propertyの後ろの()内は、iPhoneなら定番の組み合わせ。ガベージコレンクションがないとか、ちょっとでもパフォーマンスを上げるとかのためとのこと。詳しい意味はもっと後から教えてやる(習ってやる)。

アウトレットを紐づける

処理の方から一方的に呼びたい名前を決めたのは良いけれど、Viewに配置されたオブジェクトたちにはさっぱりわからない。庭で遊ぶ子犬たちに「橋之助!」と呼びかけても梨のつぶて。なので、彼らにしつけが必要なのだ。


そのしつけの方法というのが、IntefaceBuilderでの作業。「File's Owner」から該当オブジェクトまでコントロール-ドラッグでひっぱってやり、表示されるポップアップから呼びたいアウトレットを選択してあげる。
これで無事に本人に「橋之助」という自覚が生まれた。

実際に処理の中から呼び出す

下準備が整ったので、じゃあ処理を実装部(~.m)に書きますか。
ってことで鼻歌交じりに処理の中にさっきのアウトレットの名前を書いていくまえに、まだもう1つ忘れてはいけないことが。
それが「@synthesize」というもの。


これはヘッダファイル(~.h)に書いた@propertyを実行するようなものらしい。これを実装部(~.m)に書かないと、さっきまでの取り決めも絵に描いた餅、書いただけのプロパティなのだ。

@synthesize testField;

以上を持って、ようやく「橋之助!お手!」ができるようになった。もちろん、「お手!」で右足を上げるのか左足を上げるのかは、自分で書くのだぞ。