126 votes

Déclenchement programmé d'un événement de clic de bouton ?

Existe-t-il un moyen de déclencher par programmation un événement de clic sur un bouton ? J'ai un bouton placé dans une UIView, et dans un scénario particulier, je veux cliquer sur le bouton via le code, et non manuellement comme un utilisateur. Est-ce possible dans le développement iOS ? Veuillez me faire part de vos suggestions et m'indiquer comment procéder.

Merci.

316voto

Zaky German Points 7002

C'est un peu comme la réponse de Ken, mais c'est plus souple car cela permet de garder la trace des actions réelles des boutons si vous les modifiez ou en ajoutez plusieurs.

[button sendActionsForControlEvents:UIControlEventTouchUpInside];

8 votes

Est-ce que cela met en évidence le bouton si button.showsTouchWhenHighlighted = YES comme il le ferait avec un toucher réel ?

2 votes

Cette réponse est géniale car elle peut facilement être traduite pour d'autres contrôles tels que UISwitch (UIControlEventValueChanged) et dans mon cas, elle est bien meilleure que d'appeler directement le code cible/action car je veux que le switch change de place ! Merci.

0 votes

Non, le bouton n'est pas mis en évidence si button.showsTouchWhenHighlighted = YES. ;(

13voto

Chad Hine Points 11

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

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

Cela permettra d'activer le bouton de manière programmatique et de le mettre en évidence pendant une durée apparemment normale. La suggestion de Richie n'a pas fonctionné car le bouton n'a été mis en évidence (si tant est qu'il l'ait été) que pendant un temps imperceptible.

0 votes

Il n'a pas été mis en évidence, le dessin ne se produit qu'après la fin de l'exécution du morceau de code en cours. C'est une bonne correction.

7voto

Evan Mulawski Points 28536

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];
}

0 votes

Non, mon exigence n'est pas d'appeler la méthode, mais de déclencher l'événement de clic du bouton de manière programmatique, et non pas lorsque l'utilisateur le clique manuellement. J'ai créé un UIButton de manière programmatique dans un UIView, je veux déclencher l'événement de clic du bouton automatiquement après un certain intervalle de temps par le programme lui-même, et non par l'utilisateur.

0 votes

Alors, ce n'est pas possible sans synthétiser le toucher. Voir cocoawithlove.com/2008/10/ . Cependant, vous ne pouvez pas soumettre votre application à l'App Store en utilisant cette méthode, car elle utilise une API privée. Elle est normalement utilisée à des fins de débogage.

0 votes

Vous n'expliquez pas pourquoi vous devez simuler un toucher ou simplement appeler la méthode, mais c'est de loin la façon la plus simple de procéder. Votre action de minuterie peut appeler n'importe quelle méthode et la méthode qu'elle appelle peut donner un retour dans l'interface utilisateur que le bouton est pressé en changeant l'état du bouton (sélectionné, en surbrillance, etc). Si cela ne fonctionne pas, qu'il en soit ainsi.

1voto

Bharat jain Points 369

Oui,

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

Mais le problème ici est que vous ne serez pas en mesure de voir ces événements parce que c'est trop rapide . donc ce que vous pouvez faire est d'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.

1voto

Ken Pespisa Points 14935

Si vous parlez d'un UIButton, vous pouvez simplement appeler la même méthode que le UIButton lorsqu'il est touché. Par exemple :

[self myButtonsTargetMethod];

0 votes

Non, mon exigence n'est pas d'appeler la méthode, mais de déclencher l'événement de clic du bouton de manière programmatique, et non pas lorsque l'utilisateur le clique manuellement. J'ai créé un UIButton de manière programmatique dans un UIView, je veux déclencher l'événement de clic du bouton automatiquement après un certain intervalle de temps par le programme lui-même, et non par l'utilisateur.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X