*

【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{
    //処理を実装
}

関連記事

no image

【objective-c】Objective-C 基本の速習トレーニング

検索一発クンをiphoneに移植するにあたって、objective-cとxcodeの扱いに一番苦

記事を読む

no image

【objective-c】シングルトンパターン

MySingletone.h //クラスメソッドを定義 + (MySingletone*

記事を読む

no image

【java】【objective-c】Java vs Objective-C 言語比較

Java人間がObjective-Cを勉強するにあたって一番苦労するのは文法に関するネーミングの違い

記事を読む

no image

【objective-c】シングルトンインスタンスを生成するクラスを定義する

あるクラスのインスタンスが常に1つのみ存在を許すような仕組みをシングルトンパターンといいます。

記事を読む

no image

【objective-c】正規表現

NSString* targetStr = @"19801231&qu

記事を読む

no image

【objective-c】エラーメッセージとその実態

java人間にとってxcodeのコンソールが吐くログはナニヲイッテルノカワカラン。 なので、こんな

記事を読む

Comment

  1. yamashinya より:

    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 などが参照できません

    もし、解決する方法が、ご存知でしたら、教えていただけないでしょうか?
    よろしくお願い致します。

  2. yamashinya より:

    申し訳ございません
    自己解決しました。
    さきほど、質問させていただきました件、削除お願いします。

Message

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

no image
知らないと損をする6つのライセンスまとめ

オープンソースやフリーウェア、フリー素材などが巷に溢れ、それらを利用す

no image
ガリレオ:ニュースブラウザをリリースしました。

概要 ガリレオはニュースを読んだり、検索する機能に特化したブラウザア

no image
【android】Activityとプロセスのライフサイクル

またもやライフサイクル周りでハマったのですが、Androidのライフサ

→もっと見る

PAGE TOP ↑