【objective-c】デリゲート[delegate]を実装する
公開日:
:
最終更新日:2014/03/30
objective-c
デリゲートは「委譲」と訳され、クラスAで起きたイベントの処理をクラスBで実装する仕組みです。
クラスAはイベントのハンドリングをクラスBに「委譲」するわけです。
iphoneアプリでの用途は、クラスAで入力した結果をクラスB動作に反映したい場合なんかに使います。
デリゲートを使わない、クラスBで変更したい動作をクラスAで実装しなければならないので、面倒くさい効率がよくありません。
ここではクラスA(=delegate元)がクラスB(=delegate先)にデリゲートするための実装を紹介します。
以下、デリゲートするための9つの手順です。
デリゲート元の実装
●ClassA.h
//デリゲートの実装 1/9 プロトコルの宣言 @protocol MyDelegate; @interface ClassA : UIViewController{・・・ //デリゲートの実装 2/9 変数の宣言 本文でdelegateを実行するため id<MyDelegate> myDelegate; } //デリゲートの実装 3/9 プロトコルで宣言した型でデリゲートをプロパティとしての宣言 委譲先で参照するため @property (nonatomic, retain) id<MyDelegate> myDelegate; @end //デリゲートの実装 4/9 プロトコルの定義 @protocol MyDelegate<NSObject> //-(返り値)デリゲートメソッド名:引数 -(void)myDelMethod:(NSString*)text; @end
●ClassA.m
//デリゲートの実装 5/9 プロパティの宣言 @synthesize myDelegate; //デリゲートの実装 6/9 メソッドの実行 このタイミングで委譲先の処理が実行される [self.delegate text:@"test"];
デリゲート先の実装
●ClassB.h
//デリゲートの実装 7/9 プロトコルの実装 #import "ClassA.h" @interface ClassB : UIViewController<MyDelegate>{ //・・・ }
●delegate先.m
//デリゲートの実装 8/9 自身をdelegate先として登録 delegate元インスタンス.myDelegate = self; //デリゲートの実装 9/9 メソッドの実装 -(void)myDelMethod:(NSString*)text{ //処理を実装 }
関連記事
-
-
【objective-c】Objective-C 基本の速習トレーニング
検索一発クンをiphoneに移植するにあたって、objective-cとxcodeの扱いに一番苦
-
-
【java】【objective-c】Java vs Objective-C 言語比較
Java人間がObjective-Cを勉強するにあたって一番苦労するのは文法に関するネーミングの違い
-
-
【objective-c】シングルトンパターン
MySingletone.h //クラスメソッドを定義 + (MySingletone*
-
-
【objective-c】エラーメッセージとその実態
java人間にとってxcodeのコンソールが吐くログはナニヲイッテルノカワカラン。 なので、こんな
-
-
【objective-c】正規表現
NSString* targetStr = @"19801231&qu
-
-
【objective-c】シングルトンインスタンスを生成するクラスを定義する
あるクラスのインスタンスが常に1つのみ存在を許すような仕組みをシングルトンパターンといいます。
Comment
delegate について参考にさせていただきました。
一点、もし、ご存知でしたら、教えていただきたい
Xcode 4.5.2 で、上記のdelegate を実装した際には、問題なくビルドができますが、
昔作ったソースに対して、delegate を実装すると、
ClassB.h
@interface ClassB : UIViewController{
で、MyDelegate 部分で、
not found on object of type 〜
delegate先.m
delegate元インスタンス.myDelegate = self;
のmyDelegateで同様のエラーとなります。
#import もしているのですが、どうも、参照先の
@protocol などが参照できません
もし、解決する方法が、ご存知でしたら、教えていただけないでしょうか?
よろしくお願い致します。
申し訳ございません
自己解決しました。
さきほど、質問させていただきました件、削除お願いします。
[…] 手順で http://mycode.snow69it.com/%E3%82%B3%E3%83%BC%E3%83%87%E3%82%A3%E3%83%B3%E3%82%B0/%E8%A8%80%E8%AA%9E/objective-c/%E3%80%90objective-c%E3%80%91%E3%83%87%E3%83%AA%E3%82%B2%E3%83%BC%E3%83%88%E3%82%92%E5%AE%9F%E8%A3%85%E3%81%99%E3%82%8B/ が参 […]