Usando um método ibaction quando não é chamado de uma ação?
-
26-09-2019 - |
Pergunta
Há algum problema ao usar a ibação quando não é chamado da ação de um usuário?
Se você tem uma ação como
-(IBAction)sayHello:(id)sender;
Você pode chamá -lo de dentro da sua classe como:
[self sayHello:@"x"]
O @"X" não faz nada, apenas preenche o remetente.
Você pode realmente criar um método ibaction sem (id) remetente
-(IBAction)sayHello;
e chame -o de ações do usuário e de dentro do código, mas você não receberá nenhuma informação útil do remetente da interface. Qual é a maneira 'correta' de preencher o remetente, ao ligar do código? E você pode criar informações do remetente para enviar quando são chamadas de dentro do código?
Apenas tentando descobrir.
Solução
Eu acho que uma boa prática para o OOP é refletir o método -(ibaction) Sayhello: (id) remetente;
a outro método chamado: -(void) Sayhello; e dentro do método -(ibaction) sayhello: (id) remetente {[self Sayhello]; }
Se outros métodos quiserem ligar para o Sayhello: (ID) Ação do remetente para fazer algum trabalho, isso pode chamar o Sayhello. O nome do método deve fazer sentido para o cliente chamá -lo sem um problema ou contorno. Isso irá ajudá -lo quando você precisar testar ou depurar
Outras dicas
O remetente deve ser um componente da interface do usuário. Então, se na sua classe você tem, digamos, um UIBUBILL ...
UIButton *button;
Então você pode simplesmente enviá -lo como parâmetro para a ação:
[self sayHello:button];
Insider O método, não importa se for chamado da interface do usuário ou de alguma maneira simulada, você pode ter alguma lógica para detectar quem é o remetente e se comportar de maneira diferente com base nisso. Dessa forma, vários botões ou outros componentes podem reutilizar o mesmo método de ação.
A menos que você esteja realmente fazendo uso do sender
Parâmetro (veja a resposta de Jaanus para saber mais sobre isso), você está bem em passar nil
para isso ao chamar o método do código.