Cómo usar delegates personalizados en Objective-C

Necesito saber sobre el uso de métodos delegates en Objective-C. ¿Alguien puede indicarme la fuente correcta?

Querrá declarar un protocolo de delegado para su clase. Un ejemplo de un protocolo delegado e interfaz para la clase Foo podría verse así:

 @class Foo; @protocol FooDelegate  @optional - (BOOL)foo:(Foo *)foo willDoSomethingAnimated:(BOOL)flag; - (void)foo:(Foo *)foo didDoSomethingAnimated:(BOOL)flag; @end @interface Foo : NSObject { NSString *bar; id  delegate; } @property (nonatomic, retain) NSString *bar; @property (nonatomic, assign) id  delegate; - (void)someAction; @end 

No te olvides de sintetizar tus propiedades en @implementation .

Lo que este código hizo fue declarar un protocolo llamado FooDelegate; una clase que se ajuste a este protocolo se declarará como @interface SomeClass : SuperClass {} . Debido a que esta clase cumple con el protocolo FooDelegate , ahora implementa los métodos bajo FooDelegate (para requerir que estos sean implementados, use @required lugar de @optional ). El último paso es que un objeto Foo se instanciará en la clase que se ajusta a FooDelegate , y para que este objeto Foo tenga su conjunto de propiedades de delegado:

 Foo *obj = [[Foo alloc] init]; [obj setDelegate:self]; 

Ahora, su clase está preparada para recibir mensajes de objetos Foo que tienen delegates configurados correctamente.

Los delegates son muy útiles para controlar la transferencia dentro del conjunto de controladores de vista en la aplicación de forma manual. Al usar delegates, puede administrar el flujo de control muy bien.

aquí hay un pequeño ejemplo de delegates propios …

  1. Crear una clase de protocolo …. (.h solamente)

SampleDelegate.h

 #import @protocol SampleDelegate @optional #pragma Home Delegate -(NSString *)getViewName; @end 
  1. Importe la clase de protocolo superior en la clase a la que desea hacer delegar de otra clase. Aquí en mi ex. Estoy usando AppDelegate para hacer delegar el Objeto HomeViewController.

también agregue arriba DelegateName en Delegate Reference <>

ownDelegateAppDelegate.h

 #import "SampleDelegate.h" @interface ownDelegateAppDelegate : NSObject  { } 

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 { iddelegate; } @property(readwrite , assign) iddelegate; @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]; } 

Si los objetos en cuestión tienen asignado su delegate a una clase que usted escribió, digamos un controller entonces los métodos definidos para ser los métodos delegate la clase de ese objeto deben ser implementados por la clase asignada. Esto le permite controlar efectivamente el comportamiento del objeto sin subclasificar la clase del objeto para anular el comportamiento que probablemente requeriría una cantidad de comportamiento de duplicación. Es una de las partes más limpias del diseño táctil de cocoa.

Esto es algo que deberías retomar en los primeros par de intros y tutoriales sobre el toque del cocoa. Como este tutorial de Cocoa es mi novia . De hecho, hicieron que la explicación del delegate un gran encabezado.

Para empezar, puedes echar un vistazo a lo que Apple tiene que decir sobre los métodos de delegado. La documentación proporciona información bien escrita acerca de qué se trata la delegación y explica cómo utilizar las clases de AppKit que definen y dan soporte a un delegado y cómo codificar la compatibilidad de delegates en uno de sus propios objetos.

Consulte Comunicarse con objetos

(Si está interesado en codificar su propio soporte de delegado, salte a la sección “Implementación de un delegado para una clase personalizada”).

El aspecto más importante que debe quitarse de los métodos de delegado es que le permiten personalizar y afectar el comportamiento de un objeto sin necesidad de subclasificarlo.

Espero que te ayude a comenzar.