web-dev-qa-db-fra.com

Déclencher un événement de clic de bouton par programme?

Existe-t-il un moyen de déclencher par programmation un événement de clic de bouton? J'ai un bouton placé dans une vue UIV, et dans un scénario particulier, je veux cliquer sur le bouton via un code, pas manuellement en tant qu'utilisateur. Est-ce possible dans le développement iOS? S'il vous plaît fournir vos suggestions et me guider comment faire.

Merci.

118
Getsy

Un peu comme la réponse de Ken, mais plus flexible car elle gardera une trace des actions réelles des boutons si vous les modifiez ou si vous en ajoutez plusieurs.

[button sendActionsForControlEvents:UIControlEventTouchUpInside];
298
Zaky German

J'ai eu le même problème que ci-dessus. J'aurais posté un commentaire, mais ma réputation n'est pas assez bonne. Donc, je vais plutôt poster la réponse complète:

[btn setHighlighted:YES];
[btn sendActionsForControlEvents:UIControlEventTouchUpInside];
[btn performSelector:@selector(setHighlighted:) withObject:NO afterDelay:0.25];

Cela va appuyer sur le bouton par programme et le surligner pour une durée apparemment normale. La suggestion de Richie n'a pas fonctionné, le bouton n'étant mis en surbrillance (voire pas du tout) pendant un temps imperceptible. 

11
Chad Hine

Pourquoi ne pas simplement exécuter le code qui s'exécute lorsque l'utilisateur appuie sur le bouton?

-(void)myMethod
{
   // do stuff
}

-(IBAction)myButtonClick:(id)sender
{
    [self myMethod];
}

-(void)clickMyButton
{
    [self myMethod];
    // OR
    [self myButtonClick:nil];
}
5
Evan Mulawski

Si vous parlez d'un UIButton, vous pouvez simplement appeler la même méthode que celle que UIButton appelle quand il est exploité. Par exemple:

[self myButtonsTargetMethod];
1
Ken Pespisa

Oui,

[_button setHighlighted:YES];
[_button sendActionsForControlEvents:UIControlEventTouchUpInside];
[_button setHighlighted:NO];

Mais le problème ici est que vous ne pourrez pas voir ces événements parce que c'est trop rapide. vous pouvez donc essayer le code ci-dessus avec NSTimer.

NSTimer *quick = [NSTimer scheduledTimerWithTimeInterval:2.5 target:self selector:@selector(MeFirst:) userInfo:nil repeats:NO];

MeFirst est la méthode que j'ai créée.

0
Bharat jain