Objective-Cでのデリゲートメソッドの使用について知る必要があります。誰でも私を正しいソースに向けることができますか?
クラスのデリゲートプロトコルを宣言する必要があります。クラスFoo
のデリゲートプロトコルとインターフェイスの例は次のようになります。
@class Foo;
@protocol FooDelegate <NSObject>
@optional
- (BOOL)foo:(Foo *)foo willDoSomethingAnimated:(BOOL)flag;
- (void)foo:(Foo *)foo didDoSomethingAnimated:(BOOL)flag;
@end
@interface Foo : NSObject {
NSString *bar;
id <FooDelegate> delegate;
}
@property (nonatomic, retain) NSString *bar;
@property (nonatomic, assign) id <FooDelegate> delegate;
- (void)someAction;
@end
@implementation
でプロパティを合成することを忘れないでください。
このコードが行ったことは、FooDelegateというプロトコルを宣言することでした。このプロトコルに準拠するクラスは、@interface SomeClass : SuperClass <FooDelegate> {}
のように宣言されます。このクラスはプロトコルFooDelegate
に準拠しているため、FooDelegate
の下にメソッドを実装できるようになりました(これらの実装を要求するには、@required
の代わりに@optional
を使用します) 。最後のステップでは、Foo
に準拠するクラスでFooDelegate
オブジェクトをインスタンス化し、このFoo
オブジェクトのデリゲートプロパティを設定します。
Foo *obj = [[Foo alloc] init];
[obj setDelegate:self];
これで、クラスは、デリゲートが正しく設定されているFoo
オブジェクトからメッセージを受信する準備ができました。
デリゲートは、アプリ内のView Controllerの配列内の転送を手動で制御するのに非常に便利です。デリゲートを使用すると、制御フローを非常にうまく管理できます。
独自のデリゲートの小さな例です。
SampleDelegate.h
#import
@protocol SampleDelegate
@optional
#pragma Home Delegate
-(NSString *)getViewName;
@end
また、デリゲートリファレンス<>のDelegateNameを追加します
ownDelegateAppDelegate.h
#import "SampleDelegate.h"
@interface ownDelegateAppDelegate : NSObject <UIApplicationDelegate, SampleDelegate>
{
}
ownDelegateAppDelegate.m
//setDelegate of the HomeViewController's object as
[homeViewControllerObject setDelegate:self];
//add this delegate method definition
-(NSString *)getViewName
{
return @"Delegate Called";
}
HomeViewController.h
#import
#import "SampleDelegate.h"
@interface HomeViewController : UIViewController
{
id<SampleDelegate>delegate;
}
@property(readwrite , assign) id<SampleDelegate>delegate;
@end
HomeViewController.h
- (void)viewDidAppear:(BOOL)animated
{
[super viewDidAppear:animated];
UILabel *lblTitle = [[UILabel alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
lblTitle.text = [delegate getViewName];
lblTitle.textAlignment = UITextAlignmentCenter;
[self.view addSubview:lblTitle];
}
はじめに、デリゲートメソッドについてのAppleの説明を参照してください。このドキュメントでは、委任とは何かについてよく書かれた情報を提供し、AppKitクラスの使用方法とデリゲートを定義およびサポートし、デリゲートサポートを独自のオブジェクトの1つにコーディングする方法。
オブジェクトとの通信 を参照してください
(独自のデリゲートサポートのコーディングに興味がある場合は、「カスタムクラスのデリゲートの実装」セクションに進んでください。)
デリゲートメソッドを取り除く最も重要な側面は、サブクラス化せずにオブジェクトの動作をカスタマイズし、影響を与えることができることです。
それがあなたが始めるのに役立つことを願っています。
問題のオブジェクトのdelegate
が、作成したクラス、たとえばcontroller
に割り当てられている場合、そのオブジェクトのクラスのdelegate
メソッドとして定義されたメソッドを実装する必要があります割り当てられたクラスごと。これにより、オブジェクトのクラスをサブクラス化せずにオブジェクトの動作を効果的に制御して、大量の複製動作が必要になる可能性のある動作をオーバーライドできます。これは、ココアタッチデザインのクリーナーパーツの1つです。
これは、ココアタッチのイントロとチュートリアルの最初のカップルで取り上げるべきものです。このように Cocoaのチュートリアルは私のガールフレンドです 。実際、彼らはdelegate
の説明を大胆な見出しにしました。