В некотором IBAction
я увидел:
- (IBAction)pushButton:(id)sender;
Этот (id)sender
, когда я его использую?
В некотором IBAction
я увидел:
- (IBAction)pushButton:(id)sender;
Этот (id)sender
, когда я его использую?
(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 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];
}
}
"отправитель" - это имя переменной.
"(id)" означает, что тип переменной является "id", который обозначает "любой объект" (вы можете увидеть его как вершину иерархии объектов, если вы хотите
Имя метода pushButton: и требует 1 параметр любого типа.
Этот метод будет связан с кнопкой в пользовательском интерфейсе. Делегат этого пользовательского интерфейса получит этот вызов и будет иметь ссылку на UIButton, который совершил звонок. Иногда вам это не нужно, иногда вам нужно иметь доступ к этому UIButton, чтобы, например, изменить его свойства.
Это часть механизма целевого действия Cocoa, который является объектом, способным обмениваться данными друг с другом. В ответ на событие (например, щелчок мыши) один объект (обычно какой-то элемент управления) отправляет сообщение другому объекту. Отправитель вызывается, ну, "отправитель", приемник - это "цель", а сообщение - "действие".
Вы можете использовать его в обработчике целевого сообщения, чтобы получить дополнительную информацию о действии от отправителя.
Я узнал из Рабскатрана. Но я хотел бы исправить единственную часть, в которой говорилось, что "отправитель" - это имя переменной. Это должно быть (из документации Apple - https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/EventOverview/EventArchitecture/EventArchitecture.html):
"Методы, вызываемые сообщениями о действии, имеют определенную подпись: один параметр, содержащий ссылку на объект, инициирующий сообщение о действии, по соглашению имя этого параметра является отправителем. Например,
ТАК КАК ПАРАМЕТР!
Здесь пример (id) отправителя передает информацию тега от нескольких кнопок к одному IBAction. Это видео демонстрирует концепцию (id) отправителя в действии, которое, как мне показалось, очень полезно.