Цель 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) отправителя в действии, которую я нашел очень полезной.