Как использовать пользовательские delegates в Objective-C

Мне нужно знать об использовании методов делегата в Objective-C. Может ли кто-нибудь указать мне на правильный источник?

Вы захотите объявить делегатский протокол для своего classа. Пример протокола делегата и интерфейса для classа Foo может выглядеть так:

 @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 

Не забудьте синтезировать свои свойства в @implementation .

Что сделал этот код, так это объявление протокола FooDelegate; class, соответствующий этому протоколу, будет объявлен как @interface SomeClass : SuperClass {} . Поскольку этот class соответствует протоколу FooDelegate , теперь он реализует методы под FooDelegate (чтобы потребовать их реализации, используйте @required вместо @optional ). Последним шагом является создание объекта Foo в classе, который соответствует FooDelegate , и для этого объекта Foo установлено его свойство делегирования:

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

Теперь ваш class готов принимать сообщения от объектов Foo , которые правильно установлены для своих делегатов.

Делегаты очень полезны для управления переносом в массиве controllerов представлений в приложении вручную. Используя делегатов, вы можете управлять streamом управления очень хорошо.

вот небольшой пример собственных делегатов ….

  1. Создать class протокола …. (только х)

SampleDelegate.h

 #import @protocol SampleDelegate @optional #pragma Home Delegate -(NSString *)getViewName; @end 
  1. Импортируйте class протокола выше, в class, для которого вы хотите сделать делегат другого classа. Здесь, в моем бывшем. Я использую AppDelegate для делегирования объекта HomeViewController.

также добавьте выше DelegateName в ссылку делегирования <>

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]; } 

Если объект (ы), о котором идет речь, имеет свой delegate назначенный classу, который вы написали, скажем, controller тогда методы, определенные для метода delegate classа этого объекта, должны быть реализованы назначенным classом. Это позволяет эффективно управлять поведением объекта без подclassификации classа объекта, чтобы переопределить поведение, которое, вероятно, потребовало бы дублирования поведения. Это одна из самых чистых частей дизайна сенсорного cocoa.

Это то, что вы должны забрать в первых двух интро и учебниках для cocoa-прикосновения. Подобно этому учебнику от Cocoa – моя подруга . Фактически они сделали объяснение delegate большим жирным заголовком.

Чтобы начать, вы можете взглянуть на то, что Apple должна сказать о методах делегата. Документация содержит некоторую хорошо написанную информацию о том, что такое делегирование, и объясняет, как использовать classы AppKit, которые определяют и поддерживают делегата, и как координировать поддержку делегатов в одном из ваших собственных объектов.

См. « Общение с объектами»

(Если вы заинтересованы в кодировании собственной поддержки делегата, перейдите к разделу «Реализация делегата для пользовательского classа».)

Наиболее важным аспектом, который следует убрать из методов делегатов, является то, что они позволяют настраивать и влиять на поведение объекта без необходимости его подclassа.

Надеюсь, что это поможет вам начать работу.

Давайте будем гением компьютера.