iOS-デリゲート


デリゲートの例

オブジェクト A が操作を実行するために B を呼び出すとします。操作が完了すると、オブジェクト A は、オブジェクト B がタスクを完了し、オブジェクト A が他の必要な操作を実行することを認識する必要があります。 。

上記の例の重要な概念は次のとおりです。

  • A は B のデリゲート オブジェクトです。
  • B は A を参照します。
  • A は B のデリゲート メソッドを実装します
  • B デリゲート メソッドを通じて通知します

デリゲート (Delegates) オブジェクトを作成します

1. シングルビュー アプリケーションを作成します

2. 次に、ファイルを選択します [ファイル] -> [新規] -> [ファイル...

addNewFile

3. 次に、[Objective C] を選択して [次へ] をクリックします

4. サブクラスに名前を付けます以下に示すように、SampleProtocol NSObject の

setProtocolName

#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 (以下に示すように):

delegateLabel

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 オブジェクトによって認可メソッドが呼び出されると、タグはプログラムコードも更新されます。

delegateResult