2010-02-09 4 views
1

Je veux tirer un événement de bouton (ou peut-être méthode) dans le code, le bouton a été généré par iPhone SDK, je ne peux pas le mettre à jour, donc j'ajoute l'action au bouton, le code aime comme suit:iPhone, comment déclencher un événement de bouton par programmation

[theButton addTarget:self action:@selector(onButtonEvent:) 
     forControlEvents:UIControlEventAllTouchEvents]; 

-(void) onButtonEvent:(id)sender 
{ 
    AppTrace2(self, @"onButtonEvent", sender); 
} 

et quand je tape sur le bouton, l'application exécutera une fonction qui a été produit par l'iPhone sdk, aussi la nouvelle méthode « onButtonEvent » sera exécuté, puis j'essaie d'ajouter un certain code comme suit:

[theButton sendActionsForControlEvents: UIControlEventTouchDown]; 
[theButton sendActionsForControlEvents: UIControlEventTouchDownRepeat]; 
[theButton sendActionsForControlEvents: UIControlEventTouchDragInside]; 
[theButton sendActionsForControlEvents: UIControlEventTouchDragOutside]; 

[theButton sendActionsForControlEvents: UIControlEventTouchDragEnter]; 
[theButton sendActionsForControlEvents: UIControlEventTouchDragExit]; 
[theButton sendActionsForControlEvents: UIControlEventTouchDragInside]; 
[theButton sendActionsForControlEvents: UIControlEventTouchDragOutside]; 


[theButton sendActionsForControlEvents: UIControlEventTouchUpInside]; 
[theButton sendActionsForControlEvents: UIControlEventTouchUpOutside]; 
[theButton sendActionsForControlEvents:UIControlEventTouchDown]; 
[theButton sendActionsForControlEvents:UIControlEventAllEvents]; 

mais il n'appelle pas les fonctions originales qui ont été produites par iphone sdk, bien que la nouvelle méthode 'onButtonEvent' ait aussi été exécutée quand ci-dessus sendActionsForControlEvents a été exécutée .... mon but est d'invoquer la fonction d'origine ... sdk ne fournit pas d'astuce, donc je dois simuler l'événement tap pour invoquer la fonction à exécuter ....

quelqu'un peut donner un conseil sur ce problème?

Merci pour votre temps!

Cordialement

Répondre

1

Que voulez-vous dire le bouton a été généré par le SDK? Voulez-vous dire que le bouton fait partie d'une interface utilisateur que vous n'avez pas créée, par exemple les interfaces UIImagePickerController ou MPMoviePlayer?

Si vous essayez d'ajouter un comportement aux interfaces utilisateur fournies, alors vous devez peut-être repenser votre conception? Les interfaces utilisateur fournies par les API du SDK ne doivent pas être modifiées ni étendues. Vous devriez créer vos propres interfaces, qui peuvent ressembler si vous le souhaitez. Je ne sais pas si vous avez l'intention de le soumettre à l'App Store lorsque vous avez terminé, mais sachez qu'il y a eu des cas dans le passé où l'automatisation d'événements, comme les pressions de bouton et les événements tactiles ont abouti à les applications étant rejetées depuis l'App Store.

Parmi les cas notables, citons les applications utilisant la célèbre bibliothèque Three20, qui simulait des événements tactiles à des fins de test. Le simple fait que les événements tactiles simulés aient été laissés dans le code (même s'ils n'étaient pas utilisés) était une raison suffisante pour qu'Apple rejette les applications utilisant Three20.

+0

+1 Apple va certainement abattre une application qui détourne l'interface et permet à l'application de remplacer les choix d'un utilisateur dans un contrôle standard. – TechZen

+0

oui, je veux étendre le UIImagePickerController, je pense que ce n'est pas en conflit avec la Règle d'Apple .... bien, nous pouvons ignorer le problème, je veux juste savoir comment déclencher l'événement, je veux dire comment invoquer le Evénement d'origine du bouton ou de la méthode du bouton ...... – iXcoder

+0

Vous ne pouvez pas modifier l'interface du UIImagePickerController. Il n'existe aucun moyen d'automatiser les événements de contrôle tels que les boutons ou les événements tactiles. Mon conseil serait de créer une vue similaire à UIImagePickerController et d'implémenter votre fonctionnalité là-dessus. Le – Jasarien

0

Vous devriez appeler le allTargets sur le bouton et voir si elle renvoie la cible que vous voulez. Si ce n'est pas le cas, aucune des méthodes API publiques ne vous permettra de toucher cette cible et vous perdrez votre temps. Apple contacte certains de ses contrôles et les développeurs ne peuvent pas remplacer cela.

Edit01:

UIThreePartButton est une classe privée. Si vous utilisez ses méthodes, votre application sera rejetée par l'App Store.

Cependant, j'ai trouvé une source qui prétend être l'en-tête pour elle et ses superclasses. Vous pouvez voir si vous pouvez trouver quelque chose.

http://ericasadun.com/iPhoneDocs/_u_i_three_part_button_8h-source.html

Même si vous ne se soucient pas de rejet, si votre objectif ultime est d'accéder ou de remplacer quelque chose dans l'API, je pense que votre perdre votre temps. Il est peu probable que cela fonctionne et ce sera fragile si c'est le cas.

Il y a probablement une autre façon de faire ce que vous voulez.

+0

.... les méthodes aussi ne fonctionne pas ... le bouton super classe est UIThreePartButton, je pense qu'il est aussi base UIButton, je ne pense pas que ce soit idée stupide, parce que la méthode 'sendActionsForControlEvents' fonctionne, quand je l'appelle, la nouvelle méthode que j'ajoute au bouton est exécutée ...... – iXcoder

+0

Il n'y a aucune garantie que les méthodes internes d'Apple répondent à l'API publique et vice versa. – TechZen

Questions connexes