iOS-デリゲート
デリゲートの例
オブジェクト A が操作を実行するために B を呼び出すとします。操作が完了すると、オブジェクト A は、オブジェクト B がタスクを完了し、オブジェクト A が他の必要な操作を実行することを認識する必要があります。 。
上記の例の重要な概念は次のとおりです。
- A は B のデリゲート オブジェクトです。
- B は A を参照します。
- A は B のデリゲート メソッドを実装します
- B デリゲート メソッドを通じて通知します
デリゲート (Delegates) オブジェクトを作成します
1. シングルビュー アプリケーションを作成します
2. 次に、ファイルを選択します [ファイル] -> [新規] -> [ファイル...
3. 次に、[Objective C] を選択して [次へ] をクリックします
4. サブクラスに名前を付けます以下に示すように、SampleProtocol NSObject の
#5. 次に、[Create
6] を選択します。SampleProtocol.h フォルダー プロトコルにメソッドを追加し、コードを更新します。次のように:
#import <Foundation/Foundation.h>// 协议定义@protocol SampleProtocolDelegate <NSObject>@required- (void) processCompleted;@end// 协议定义结束@interface SampleProtocol : NSObject{ // Delegate to respond back id <SampleProtocolDelegate> _delegate; }@property (nonatomic,strong) id delegate;-(void)startSampleProcess; // Instance method@end
7. SampleProtocol.m ファイルのコードを変更してインスタンス メソッドを実装します:
#import "SampleProtocol.h"@implementation SampleProtocol-(void)startSampleProcess{ [NSTimer scheduledTimerWithTimeInterval:3.0 target:self.delegate selector:@selector(processCompleted) userInfo:nil repeats:NO];}@end
8. ラベルをオブジェクト ライブラリから UIView にドラッグし、ViewController に UILabel を追加します。 .xib (以下に示すように):
9. IBOutlet ラベルを作成して myLabel という名前を付け、次に示すようにコードを更新して ViewController.h SampleProtocolDelegate
に追加します。#import <UIKit/UIKit.h>#import "SampleProtocol.h"@interface ViewController : UIViewController<SampleProtocolDelegate>{ IBOutlet UILabel *myLabel;}@end
10 と表示されるので、認可メソッドを完了し、SampleProtocol のオブジェクトを作成し、startSampleProcess メソッドを呼び出します。以下に示すように、ViewController.m ファイルを更新します。
#import "ViewController.h"@interface ViewController ()@end@implementation ViewController- (void)viewDidLoad{ [super viewDidLoad]; SampleProtocol *sampleProtocol = [[SampleProtocol alloc]init]; sampleProtocol.delegate = self; [myLabel setText:@"Processing..."]; [sampleProtocol startSampleProcess];// Do any additional setup after loading the view, typically from a nib.}- (void)didReceiveMemoryWarning{ [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated.}#pragma mark - Sample protocol delegate-(void)processCompleted{ [myLabel setText:@"Process Completed"];}@end
11. 以下に示すような出力が表示されます。元のタグは引き続き実行されます。SampleProtocol オブジェクトによって認可メソッドが呼び出されると、タグはプログラムコードも更新されます。