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

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

- (IBAction)pushButton:(id)sender;

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

6 ответов


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

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

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

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

посмотреть Ссылка На Класс UIControl для получения более подробной информации.


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

-(IBAction) editingEnded:(id) sender {
   // the cast goes here, lets assume there's 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];
   }
}

"sender" - это имя переменной.

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

имя метода -кнопки: и требуют 1 параметра любого вида.

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


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

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


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

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

  • (void)moveToEndOfLine:(id)отправитель; // от NSResponder.h"

ИТАК, ЭТО ПАРАМЕТР!


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

Программирование iPhone - (id)отправитель объяснил