Подтвердить что ты не робот

Цель C: что такое "(id) отправитель"?

В некотором IBAction я увидел:

- (IBAction)pushButton:(id)sender;

Этот (id)sender, когда я его использую?

4b9b3361

Ответ 1

(id)sender is the object which sent the message to that selector.

Пример кода:

- (IBAction)submitButton:(id)sender {
    UIButton *button = (UIButton *)sender;
    [button setEnabled:NO];
    [button setTitle:@"foo" forState:UIControlStateDisabled];
}

Ответ 2

Мэтт Галлоуэй описал значение (id) sender в действиях на форумах iPhone SD SDK таким образом:

(id) отправитель - это объект, который отправил сообщение этому селектору. Это похоже на функции делегата, где у вас есть элемент управления, переданный функции, и т.д.

Вы использовали бы это, если бы у вас было 2 объекта, которые вызывали этот селектор, и вы хотели различать их. Конечно, вы могли бы просто использовать две разные функции, но часто чистые и меньше дублирования кода для использования одной функции.

См. Ссылка на класс UIControl для более подробной информации.


Пример для этого: UITextField имеет делегат, который запускается, когда заканчивается редактирование UITextField:

-(IBAction) editingEnded:(id) sender {
   // the cast goes here, lets assume there more than one UITextfield 
   // in this Owner and you want to know which one of them has triggered
   // the "editingEnded" delegate
   UITextField *textField= (UITextField*)sender;
   if(textfield == iAmTheLastTextField)
   {
     // for example login now.
     [self login];
   }
}

Ответ 3

"отправитель" - это имя переменной.

"(id)" означает, что тип переменной является "id", который обозначает "любой объект" (вы можете увидеть его как вершину иерархии объектов, если вы хотите

Имя метода pushButton: и требует 1 параметр любого типа.

Этот метод будет связан с кнопкой в ​​пользовательском интерфейсе. Делегат этого пользовательского интерфейса получит этот вызов и будет иметь ссылку на UIButton, который совершил звонок. Иногда вам это не нужно, иногда вам нужно иметь доступ к этому UIButton, чтобы, например, изменить его свойства.

Ответ 4

Это часть механизма целевого действия Cocoa, который является объектом, способным обмениваться данными друг с другом. В ответ на событие (например, щелчок мыши) один объект (обычно какой-то элемент управления) отправляет сообщение другому объекту. Отправитель вызывается, ну, "отправитель", приемник - это "цель", а сообщение - "действие".

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

Ответ 5

Я узнал из Рабскатрана. Но я хотел бы исправить единственную часть, в которой говорилось, что "отправитель" - это имя переменной. Это должно быть (из документации Apple - https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/EventOverview/EventArchitecture/EventArchitecture.html):

"Методы, вызываемые сообщениями о действии, имеют определенную подпись: один параметр, содержащий ссылку на объект, инициирующий сообщение о действии, по соглашению имя этого параметра является отправителем. Например,

  • (пустоты) moveToEndOfLine: отправитель (ID);//из NSResponder.h "

ТАК КАК ПАРАМЕТР!

Ответ 6

Здесь пример (id) отправителя передает информацию тега от нескольких кнопок к одному IBAction. Это видео демонстрирует концепцию (id) отправителя в действии, которое, как мне показалось, очень полезно.

Программирование iPhone - (id) отправлено