たまにやろうとすると記憶から飛んでいるのでメモしておく。
実装の手順は以下の通り。

例: HogeViewクラスにdelegateを実装、Fugaをdelegate先に指定する場合。

(1)delegateプロトコル&メソッドを定義する。
HogeView.h

@interface HogeView : UIView
// 循環参照を避けるため、必ずweakにする
@property (nonatomic, weak) id *delegate;
- (void)commit;
@end

@protocol HogeViewDelegate <NSObject>
- (void)hogeViewCommit;
@end

(2)HogeViewクラスにdelegateを呼ぶ処理を実装
HogeView.m

@implementation HogeView
- (void)commit
{
    // メソッドの存在確認を忘れないように
    if ([_delegate respondsToSelector:@selector(hogeViewCommit)]]) {
        [_delegate hogeViewCommit];
    }
}
@end

(3)Fugaクラスにdelegateの組み込み
Fuga.h

// <>で実装するdelegateプロトコルを指定。複数ある場合はカンマ区切り
@interface Fuga : NSObject<HogeViewDelegate> {
}

Fuga.m

@implementation Fuga
- (void)hogeViewCommit
{
    NSLog(@"Good delegate!")
}

/*!
 テストメソッド
 */
- (void)test
{
    HogeView hogeView = [[HogeView alloc] init];
    // delegateに自身を指定
    hogeView.delegate = self;
    // こうすると↑のhogeViewCommitが呼ばれることになる
    [hogeView commit];
}
@end

コメントを残す

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

Name *
Email *
Website

*