2010年4月22日木曜日

アクションメソッドとアウトレットとアプリケーションデリゲート

アクションメソッドとアプリケーションデリゲートの違いがわかっていないのでここで整理します。

■アクションメソッド:
 呼び出し側のイベントにより、当該オブジェクトのインスタンスを呼び出すために、当該インスタンスを(IBAction)で識別、Interface Builderに明示し、InterfaceBuilderのユーザインタフェースに表示されるため、インスタンスと呼び出し側オビジェクとをリンクします。ここのインスタンスで取得されるsenderは、呼び出し側のオブジェクトそのものとなり、当該オブジェクトのメソッドも利用可能となります。

AppDelegte.h のクラス宣言でメソッドプロトタイプ宣言の返り値に(IBAction) を指定します。
----------------------------------------------------------------------------------------
@interface xxxAppDelegate : NSObject <UIApplicationDelegate>{
    // インスタンス変数宣言
}
   // メソッドプロトタイプ宣言
  -  (IBAction) action : (UITextField *) sender ;
// forEvent : (UIEvent *) event を書くとさらに時刻やタッチされた座標等の追加
// 情報を得ることができます。

@end
------------------------------------------------------------------------------------------
 これにより、Interface Builder上でアクションメソッドとして表示されます。

さらにInterface Builderにより、ボタン等のクラスの動作(Event)と
結びつけられることで、イベント発生時に呼び出されます。

 呼び出された後の動作は、AppDelegate.mに記述します。

<関連付けクラス(Event) ⇒ アクションメッソドが呼び出される。>


■アウトレット
アウトレットは、メソッドプロトタイプ宣言ではなく、インスタンス変数宣言に記載します。
----------------------------------------------------------------------------------------
@interface xxxAppDelegate : NSObject <UIApplicationDelegate>{
// インスタンス変数宣言
}
// メソッドプロトタイプ宣言

@property ( nonatomic, retain) IBOutlet UIWebView* WebView;

@end
------------------------------------------------------------------------------------------
これにより、Interface BuilderのOutlet(コンセントの意)が現れ、ユーザインタフェース等の
クラス(インスタンス)そのものと関連づけます。
この関連付けにより、xxxAPPDelegate.m に当該インスタンスとそのメソッドを直接呼ぶことができるようです。

例:[ webView loadRequest : urlReq ];

<アウトレット宣言クラス ⇒ 関連付けクラスのメソッド等を呼び出すことができる>

■アプリケーションデリゲート
 アプリケーションデリゲートは、アウトレットの一種であり、UIApplicationがデフォルトで保有するアウトレットとして、deligateが宣言され、Interface Builderから見ることができます。

<UIApplicationのアウトレット(deligate) → 関連付けクラスに記載されたアウトレット指定のメッソドを記述すればUIApplicationから必要時に呼び出だされる>

やっと理解できました。ほっ。

0 件のコメント:

コメントを投稿