Подтвердить что ты не робот

Какой лучший способ вызвать IBAction с помощью кода?

Скажем, например, у меня есть IBAction, который подключен к UIButton в построителе интерфейса.

- (IBAction)functionToBeCalled:(id)sender
{
   // do something here   

}

В моем коде, скажем, например, в другом методе, что лучший способ назвать это IBAction?

Если я попытаюсь вызвать его так, я получаю сообщение об ошибке:

[self functionToBeCalled:];

Но, если я попытаюсь назвать это так (немного обманываю, думаю), он отлично работает:

[self functionToBeCalled:0];

Каков правильный способ его правильного вызова?

4b9b3361

Ответ 1

Правильный способ:

- [self functionToBeCalled:nil] 

Передача отправителя nil, указывающая, что он не вызывается через обычную структуру.

ИЛИ

- [self functionToBeCalled:self]

Пропустить себя как отправителя, что тоже правильно.

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

Ответ 2

ИМО, вызывающий IBAction, должен запускаться только действиями пользовательского интерфейса (например, нажатием кнопки). Если вам нужно запустить некоторый код из нескольких мест, вы можете извлечь этот код из IBAction в новый метод и вызвать этот метод из обоих мест.

- (IBAction)onButtonTap:(id)sender
{
    [self doSomething];
}

Это позволяет вам выполнять дополнительную логику на основе отправителя (возможно, вы можете назначить одно действие нескольким кнопкам и решить, что делать на основе параметра sender). А также уменьшает объем кода, который вам нужно записать в IBAction (который сохраняет чистоту вашего контроллера).