Использование метода IBAction, когда он не вызывается из действия? - PullRequest
3 голосов
/ 12 июня 2010

Существуют ли проблемы при использовании IBAction, когда он фактически не вызывается из действий пользователя?

Если у вас есть действие, подобное

-(IBAction)sayHello:(id)sender;

Вы можете вызвать его из своего классанапример:

[self sayHello:@"x"]

@ "x" ничего не делает, он просто заполняет отправителя.

На самом деле вы можете создать метод IBAction без (id) отправителя

-(IBAction)sayHello;

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

Просто пытаюсь понять это.

Ответы [ 3 ]

6 голосов
/ 12 июня 2010

Я думаю, что хорошей практикой для ООП является рефракторинг метода - (IBAction) SayHello: (идентификатор) отправитель;

другому методу, называемому: - (void) sayHello; и внутри метода - (IBAction) sayHello: (id) отправитель { [self sayHello]; }

Если другие методы хотят вызвать действие отправителя sayHello: (id) для выполнения какой-либо работы, оно может вызвать sayHello. Имя метода должно иметь смысл, чтобы клиент вызывал его без проблем или обходного решения. Это поможет вам, когда вам придется тестировать или отлаживать

3 голосов
/ 12 июня 2010

Отправитель должен быть компонентом пользовательского интерфейса. Так что если в вашем классе у вас есть, скажем, UIButton ...

UIButton *button;

Тогда вы можете просто отправить его в качестве параметра к действию:

[self sayHello:button];

Внутри метода, независимо от того, вызывается ли он из пользовательского интерфейса или каким-либо имитированным способом, вы можете иметь некоторую логику, чтобы определить, кто является отправителем, и вести себя по-разному на основании этого. Таким образом, несколько кнопок или другие компоненты могут повторно использовать один и тот же метод действия.

2 голосов
/ 12 июня 2010

Если вы на самом деле не используете параметр sender (подробности см. В ответе Яануса), вы можете передать ему nil при вызове метода из кода.

...