Какой лучший способ вызвать IBAction с помощью кода?
Скажем, например, у меня есть IBAction, который подключен к UIButton в построителе интерфейса.
- (IBAction)functionToBeCalled:(id)sender
{
// do something here
}
В моем коде, скажем, например, в другом методе, что лучший способ назвать это IBAction?
Если я попытаюсь вызвать его так, я получаю сообщение об ошибке:
[self functionToBeCalled:];
Но, если я попытаюсь назвать это так (немного обманываю, думаю), он отлично работает:
[self functionToBeCalled:0];
Каков правильный способ его правильного вызова?
Ответы
Ответ 1
Правильный способ:
- [self functionToBeCalled:nil]
Передача отправителя nil, указывающая, что он не вызывается через обычную структуру.
ИЛИ
- [self functionToBeCalled:self]
Пропустить себя как отправителя, что тоже правильно.
Какой из них выбрать, зависит от того, что именно делает функция, и от того, что он ожидает от отправителя.
Ответ 2
ИМО, вызывающий IBAction
, должен запускаться только действиями пользовательского интерфейса (например, нажатием кнопки). Если вам нужно запустить некоторый код из нескольких мест, вы можете извлечь этот код из IBAction в новый метод и вызвать этот метод из обоих мест.
- (IBAction)onButtonTap:(id)sender
{
[self doSomething];
}
Это позволяет вам выполнять дополнительную логику на основе отправителя (возможно, вы можете назначить одно действие нескольким кнопкам и решить, что делать на основе параметра sender
). А также уменьшает объем кода, который вам нужно записать в IBAction
(который сохраняет чистоту вашего контроллера).