iOS — Делегаты

Пример для делегата

Предположим, что объект A вызывает объект B для выполнения действия. После завершения действия объект A должен знать, что B выполнил задачу, и предпринять необходимые действия. Это достигается с помощью делегатов.

Ключевые концепции в приведенном выше примере:

  • A является объектом-делегатом B.

  • У B будет ссылка на A.

  • A будет реализовывать методы делегата B.

  • B уведомит A через методы делегата.

Шаги по созданию делегата

Шаг 1. Сначала создайте приложение с одним представлением.

Шаг 2 — Затем выберите Файл → Создать → Файл …

Учебник iOS

Шаг 3 — Затем выберите Objective C Class и нажмите Next.

Шаг 4 — Дайте классу имя, скажем, SampleProtocol с подклассом NSObject, как показано ниже.

Учебник iOS

Шаг 5 — Затем выберите создать.

Шаг 6 — Добавьте протокол в файл SampleProtocol.h, и обновленный код будет следующим:

#import <Foundation/Foundation.h>

// Protocol definition starts here 
@protocol SampleProtocolDelegate <NSObject>
@required
- (void) processCompleted;
@end

// Protocol Definition ends here
@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 — Добавьте UILabel в ViewController.xib, перетащив метку из библиотеки объектов в UIView, как показано ниже.

Учебник iOS

Шаг 9 — Создайте IBOutlet для метки и назовите его myLabel и обновите код, как показано ниже, чтобы принять SampleProtocolDelegate в ViewController.h.

#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.

Учебник iOS

Выберите поля, которые будут показаны. Прочие будут скрыты. Перктаскивайте мышкой для изменения порядка полей.
  • Изображение
  • SKU
  • Рейтинг
  • Цена
  • Запасы
  • Доступность
  • В корзину
  • Описание
  • Содержимое
  • Вес
  • Размеры
  • Дополнительная информация
  • Атрибуты
  • Custom attributes
  • Настраиваемые поля
Сравнить
Список желаний 0
Открыть страницу желаний Продолжить покупки