Какой лучший способ вызвать IBAction из-за кода? - PullRequest
29 голосов
/ 22 мая 2010

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

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

}

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

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

[self functionToBeCalled:];

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

[self functionToBeCalled:0];

Как правильно назвать это правильно?

Ответы [ 2 ]

67 голосов
/ 22 мая 2010

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

- [self functionToBeCalled:nil] 

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

ИЛИ

- [self functionToBeCalled:self]

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

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

10 голосов
/ 01 октября 2015

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

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

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

...