Como usar delegates personalizados no Objective-C

Eu preciso saber sobre o uso de methods delegates em Objective-C. Alguém pode me apontar para a fonte correta?

Você desejará declarar um protocolo delegado para sua turma. Um exemplo de protocolo e interface delegates para a class Foo pode ser assim:

 @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 

Não se esqueça de sintetizar suas propriedades na @implementation .

O que esse código fez foi declarar um protocolo chamado FooDelegate; uma class que esteja de acordo com este protocolo seria declarada como @interface SomeClass : SuperClass {} . Como essa class está em conformidade com o protocolo FooDelegate , ela agora implementa os methods em FooDelegate (para exigir que eles sejam implementados, use @required vez de @optional ). A última etapa é que um object Foo seja instanciado na class que está de acordo com FooDelegate e que esse object Foo tenha sua propriedade delegada definida:

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

Agora, sua class está preparada para receber mensagens de objects Foo que tenham seus delegates definidos corretamente.

Os delegates são muito úteis para controlar a transferência dentro da matriz de view controllers no aplicativo manualmente. Usando delegates, você pode gerenciar o stream de controle muito bem.

aqui é pequeno exemplo de delegates próprios ….

  1. Crie uma class de protocolo …. (apenas .h)

SampleDelegate.h

 #import @protocol SampleDelegate @optional #pragma Home Delegate -(NSString *)getViewName; @end 
  1. Importar acima da class de protocolo na class a quem você deseja delegar de outra class. Aqui no meu ex. Eu estou usando AppDelegate para tornar delegado do object HomeViewController.

também adicionar acima DelegateName no 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]; } 

Se o (s) object (s) em questão tem seu delegate atribuído a uma class que você escreveu, digamos um controller então os methods definidos para serem os methods delegate dessa class de object devem ser implementados pela class designada. Isso permite controlar efetivamente o comportamento do object sem subclassificar a class do object para replace o comportamento que provavelmente exigiria uma quantidade de comportamento de duplicação. É uma das partes mais limpas do design do cocoa touch.

Isso é algo que você deve pegar no primeiro par de introduções e tutoriais para tocar o cacau. Como este tutorial do Cocoa é minha namorada . Na verdade, eles fizeram da explicação do delegate um grande título em negrito.

Para começar, você pode dar uma olhada no que a Apple tem a dizer sobre os methods delegates. A documentação fornece algumas informações bem escritas sobre o que é a delegação e explica como usar as classs do AppKit que definem e oferecem suporte a um delegado e como codificar o suporte delegado em um de seus próprios objects.

Veja comunicando-se com objects

(Se você estiver interessado em codificar seu próprio suporte delegado, vá para a seção “Implementando um delegado para uma class personalizada”.)

O aspecto mais significativo a ser retirado dos methods delegates é que eles permitem personalizar e afetar o comportamento de um object sem a necessidade de subclassá-lo.

Espero que ajude você a começar.