(例)カウントダウンする自作クラス MyTimer にて,以下の自作デリゲードを実装してカウントダウン中に他クラスから自身を制御できるようにする.
(b) カウントダウンが終わったときによばれる ( didMyTimerFinished: )
自作クラスのヘッダーにて,protocolを用いてデリゲート名 MyTimerDelegate および,必要なメソッドを宣言して,interfaceにて自デリゲートを持つidを追加する.
[MyTimer.h]つぎに,メソッドファイルにて,そのデリゲートを好きなタイミングで呼び出す.
#import < foundation / foundation.h >
@class MyTimer;
@protocol MyTimerDelegate
@optional // オプション
-(void)didMyTimerCounted:(MyTimer *)myTimer;
@required // 必須
-(void)didMyTimerFinished:(MyTimer *)myTimer;
@end
@interface MyTimer : NSObject
@property NSInteger counter;
@property id < MyTimerDelegate > delegate;-(void)countDown:(NSInteger)time;
@end
[MyTimer.m]自作デリゲートの実装のこれで終わり.ほかのデリゲートと同様に使えばOK.
#import "MyTimer.h"
@implementation MyTimer
-(void)countDown:(NSInteger)time
{
self.counter = time;
do{
self.counter--;
[self.delegate didMyTimerCounted:self];
}while ( self.counter > 0 );
[self.delegate didMyTimerFinished:self];
}
@end
[MEViewController.h]
#import < UIKit / UIKit.h >
#import "MyTimer.h"
@interface MEViewController : UIViewController < MyTimerDelegate >
{
MyTimer *myTimer_;
}
@end
デリゲートの各メソッドを書いていく
[MEViewController.m]
#import "MEViewController.h"
@implementation MEViewController
- (void)viewDidLoad
{
[super viewDidLoad];
myTimer_ = [[MyTimer alloc] init];
myTimer_.delegate = self;
[myTimer_ countDown:20];
}
-(void)dealloc
{
myTimer_.delegate = nil;
}
-(void)didMyTimerCounted:(MyTimer *)myTimer
{
NSLog(@"%s", __func__);
NSLog(@"counter = %d", myTimer.counter);
}
-(void)didMyTimerFinished:(MyTimer *)myTimer
{
NSLog(@"%s", __func__);
NSLog(@"counter = %d", myTimer.counter);
}
@end
このサンプルコードです.ライセンスは使った分・得した分だけ,知り合いに飯を奢ること.
1 コメント:
はじめまして
プログラミングの参考にさせていただくために
ファイルの方ダウンロードさせていただきました。
すばらしいレクチャー誠に感謝しております。
これからも参考にさせていただくと思いますので
よろしくお願いします。
では失礼します。
コメントを投稿