Простой пример делегата?

«Код хороших кодеров и его повторное использование хорошими кодерами» Это происходит прямо сейчас, но «Хороший кодер» - единственный ОДИН , которому нравится этот код. и «Великие Кодеры» предназначены только для того, чтобы обнаружить ошибку в этом, потому что у них нет времени, чтобы думать и кодировать. Но у них есть время найти ошибку в этом коде.

, поэтому не критикуйте !!!!!!!!

Создайте свой собственный код так, как ВЫ хотите.

8
задан Josh Bradley 19 August 2013 в 15:43
поделиться

2 ответа

Я не буду вдаваться в подробный анализ опубликованного вами кода - самый полезный ответ, который вы можете получить, - это какое-то указание на общие принципы, выходящие за рамки конкретного образца кода. Вот общие принципы ...

  • Делегат - это объект, объекты которого (обычно) вызываются для обработки или ответа на определенные события или действия.
  • Вы должны «сообщить» объекту, который принимает делегата, что вы хотите быть делегатом. Это делается путем вызова [object setDelegate: self]; или установки object.delegate = self; в вашем коде.
  • Объект, действующий как делегат, должен реализовывать указанные методы делегата . Объект часто определяет методы либо в протоколе, либо в NSObject через категорию как методы по умолчанию / пустые, либо и то, и другое. (Формальный протокольный подход, вероятно, чище, особенно теперь, когда Objective-C 2.0 поддерживает дополнительные методы протокола.)
  • Когда происходит соответствующее событие, вызывающий объект проверяет, реализует ли делегат метод сопоставления (используя - RespondsToSelector: ) и вызывает этот метод, если это так. Затем делегат получает контроль, чтобы делать все, что он должен ответить, прежде чем вернуть управление вызывающему.

В конкретном примере, над которым вы работаете, обратите внимание, что GKPeerPickerController имеет свойство с именем delegate , который принимает объект типа id . Это означает id (любой подкласс NSObject), реализующий методы в протоколе GKPeerPickerControllerDelegate . GKPeerPickerControllerDelegate , в свою очередь, определяет ряд методов делегата и описывает, когда они будут вызваны. Если вы реализуете один или несколько из этих методов (в документации говорится, что все они являются необязательными, но ожидается два) и зарегистрируетесь в качестве делегата, эти методы будут вызваны. (Обратите внимание, что вам не нужно объявлять прототип метода в файле .h, просто импортируйте заголовок протокола и реализуйте метод в файле .m.

12
ответ дан 5 December 2019 в 13:01
поделиться

Я изучаю разработку ObjC и iPhone. Я бы не стал заходить так далеко, чтобы сказать, что прекрасно понимаю делегатов и их использование. Ваше первое приложение для iPhone , которое можно найти на портале разработчиков на сайте Apple, подробно рассматривает очень простой пример, в котором используется делегат TextField для переопределения метода, позволяющего скрыть клавиатуру при редактировании в TextField. сделано. Например, если я могу вставить оттуда соответствующие фрагменты:

// MyViewController.h
#import <UIKit/UIKit.h>

@interface MyViewController : UIViewController <UITextFieldDelegate> {
        UITextField *textField;
        UILabel *label;
        NSString *string;
}

@property (nonatomic, retain) IBOutlet UITextField *textField;
@property (nonatomic, retain) IBOutlet UILabel *label;
@property (nonatomic, copy) IBOutlet NSString *string;

- (IBAction)changeGreeting:(id)sender;

@end


// MyViewController.m
#import "MyViewController.h"

@implementation MyViewController

@synthesize textField;
@synthesize label;
@synthesize string;

- (BOOL)textFieldShouldReturn:(UITextField *)theTextField {
        if (theTextField == textField) {
                [textField resignFirstResponder];
        }
        return YES;
}

@end

Сюда, textFieldShouldReturn - это метод, который является частью протокола UITextFieldDelegate . Насколько я понял, важно то, что в каком бы классе вы ни реализовали методы делегата, этот класс должен следовать протоколу этого конкретного делегата (имея имя протокола в угловых скобках непосредственно рядом с имя класса, от которого он наследуется).

1
ответ дан 5 December 2019 в 13:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: