コントロールのイベントにメソッドを割り当てる : Objective-C プログラミング
PROGRAM
コントロールのイベントにメソッドを割り当てる
UITextField や UIButton などの UIControl から派生されたコントロールでは、何らかの操作を行った際に、それに対応するイベントが発生するようになっています。
例えば、UIButton が押された場合は "Touch Up Inside" というイベントが発生して、それにメソッドが関連付けられている場合には、UIButton が押されたタイミングで、そのメソッドが実行されます。
ここでは、インターフェイスビルダーを使用してイベントにメソッドを登録する方法と、Objective-C コードからイベントを登録する方法の 2 つについて見て行きたいと思います。
インターフェイスビルダーでイベントを割り当てる
このイベントをインターフェイスビルダーで割り当てる場合は、まず、割り当てたいメソッドを、そのコントロールが配置されているビューの UIViewController に定義します。
割り当てたいメソッドの戻り値のところを IBAction にして、引数は (id)sender を 1 つ採るようにします。
// インターフェイスビルダーで割り当てるメソッドは、戻り値を IBAction に、第一引数に (id)sender を設定します。
- (IBAction)pushButton:(id)sender;
引数の型は、もしこのメソッドを UIButton のイベントにしか割り当てないのであれば (UIButton*)sender でも大丈夫です。
割り当てるメソッドを定義したら、インターフェイスビルダーで、このメソッドを登録したいコントロールの上で右クリックします。
そして "Touch Up Inside" など、割り当てたいイベント名の右側の ○ をマウスでドラッグドロップして、線を、割り当てるメソッドを実装した UIViewController まで引っ張って行きます。
すると、IBAction として定義したメソッドの一覧が表示されるので、その中から目的のメソッドを選択します。
このようにすることで、上記の例では UIButton が押されたときに発生する "Touch Up Inside" イベントに、IBAction で定義したメソッド "pushButton:" が割り当てられました。
Objective-C でイベントを割り当てる場合
インターフェイスビルダーを使わずに、Objective-C コードでイベントを割り当てる場合は、UIControl に実装されている "addTarget:action:forControlEvents:" メソッドを使って割り当てます。
具体的には、コントロールが配置された UIViewController の初期化メソッドなどの適切な場所で、次のようなコードを記載する感じになります。
// UIButton 型の button に、"Touch up Inside" イベントを割り当てます。
[button addTarget:self action:@selector(pushButton:) forControlEvents:UIControlEventTouchUpInside];
このようにすることで、"Touch Up Inside" イベントに "pushButton:" メソッドが割り当てられました。
このとき、"pushButton:" メソッドの戻り値はわざわざ IBAction にしなくても、void にしても大丈夫です。どちらでも問題ないので、インターフェイスビルダーでも設定する可能性のあるメソッドであれば IBAction を付けておいて良いと思います。
ちなみに、コントロールに割り当てられたイベントのメソッドは、次のようにして意図的に呼び出すことが可能です。
// button に Touch Up Inside イベントを発生させます。
[button sendActionsForControlEvents:UIControlEventTouchUpInside];
このようにすることで、ユーザーが画面をタッチしなくても、button で "Touch Up Inside" イベントが発生したものとされて、それにメソッドが割り当てられていれば、それを実行してくれます。
[ もどる ]