- (IBAction)someMethod:(id)sender {
// do stuff
}
Использование (id)sender
, у вас есть ссылка на который послал вызов метода. Обратите внимание, что это не должно быть ограничено UIButton
.
Если вы создали этот метод с помощью контрольно-перетаскивания из раскадровки единственного подключения одной кнопки, а затем sender
в основном бесполезен (она всегда будет таким же), и, вероятно, следует помечаются как неиспользуемые:
#pragma unused (sender)
(компилятор может лучше оптимизировать свой код, если вы сделаете это.)
Однако, нет ничего плохого подключения нескольких элементов пользовательского интерфейса к тому же IBAction
метода. Вы можете отличить отправителя через:
[sender tag]
... который возвращает int
, который был либо установить с помощью раскадровки или программно.
Кроме того, этот способ можно вызвать в другом месте вашего класса. Вы можете либо передать nil
в качестве отправителя, либо вы можете передать ему определенный элемент пользовательского интерфейса, чтобы закрепить его в результатах, которые вы закодировали для объектов этого тега.
Тем не менее, если вы планируете вызвать метод с nil
аргументом, вы всегда можете бросить:
if(!sender)
...в метод для обработки специальной логики, когда метод был вызван программным способом, а не через взаимодействие с пользователем.
И не забывайте, что третий вариант: '- (IBAction) testButton: (id) отправитель forEvent: (UIEvent *) event'. – rmaddy
См. Документы для 'UIControl addTarget: действие: forControlEvents:'. – rmaddy
Это два разных метода; тот, который не принимает аргументов, и тот, который принимает один аргумент. То, что структура рассматривает их как один и тот же метод, представляет собой деталь реализации. – bbum