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.

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top