2011-06-11 5 views
0

J'essaie de comprendre comment faire quelque chose peut-être légèrement non standard. J'ai un contrôleur de vue (un UIViewController) qui a 1 UITextField et 3 UIButtons. J'utilise les UIButtons essentiellement comme des bascules; seulement 1 peut être sélectionné à la fois. Donc, chacun a:Avoir un UIButton encore sélectionnable quand UITextField est premier répondeur?

[myButton1 addTarget:self action:@selector(buttonPushed:) 
    forControlEvents:UIControlEventTouchUpInside]; 

Et je fais cela pour basculer entre les boutons:

- (void) buttonPushed:(id)sender 
{ 
    myButton1.selected = NO; 
    myButton2.selected = NO; 
    myButton3.selected = NO; 
    if (sender == myButton1) { 
     myButton1.selected = YES; 
    } 
    else if (sender == myButton2) { 
     myButton2.selected = YES; 
    } 
    else if (sender == myButton3) { 
     myButton3.selected = YES; 
    } 
} 

Maintenant, la chose est, je veux toujours les boutons pour être sélectionné, même si le clavier du champ de texte est en place (les boutons et le champ de texte sont tous deux visibles lorsque le clavier est affiché). Mais puisque le champ de texte a le premier répondeur, les touches touchées ne sont pas reconnues (n'atteint jamais la méthode buttonPushed cible). Je ne veux pas que l'utilisateur quitte le clavier pour sélectionner un bouton. Comment puis-je faire cela? Merci!

Répondre

0

je pense que vous devriez utiliser des méthodes tactiles comme

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event 
or 
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event 

je préfère u utiliser la méthode touchEnded. ici vous vérifiez si l'utilisateur tape sur uibutton puis faites ce que vous voulez

+0

Merci pour votre inscription. Bien qu'il semble que ces méthodes tactiles ne fonctionnent pas pour UIButton. Je suppose que je peux juste sous-classer UIButton et partir de là pour intercepter les méthodes tactiles. Je ne sais pas si c'est la solution mais je vais commencer là. – aSadhankar

+0

vous devriez vérifier steven fisher répondre également. il a raison –

1

Je n'ai eu aucun problème pour obtenir des événements à partir des boutons avec le clavier. Etes-vous sûr que vous n'atteignez pas ce gestionnaire?

Une chance myButton1, etc. n'est-elle pas connectée?

+0

Je n'utilise pas de constructeur d'interface. J'ajoute simplement les boutons à la vue après avoir défini leurs propriétés. La méthode buttonPushed est atteinte lorsque le clavier n'est pas relevé, mais lorsque le clavier est en haut, il ne l'atteint pas du tout. – aSadhankar

+0

Est-ce que j'ajoute le bouton correctement à la vue? Ou dois-je faire autre chose? Si j'ajoute la méthode "touchesEnded", ça frappe quand je clique n'importe où sur l'écran à l'exception des UIButtons. Et quand le clavier est en place, il ne frappe pas la méthode touchEnded si je clique n'importe où. – aSadhankar

3

Je l'ai compris. Les 2 réponses étaient correctes; le problème est que j'utilisais un UITapGestureRecognizer sur cette vue. Pour une raison quelconque, cela empêchait tout événement tactile d'être atteint autre que les prises prédéfinies, je suppose. Doh.

J'ai retiré le détecteur de mouvement et maintenant les événements tactiles sont touchés lorsque le clavier est affiché.

+0

Ah, bonne trouvaille. Merci de l'avoir partagé. –

Questions connexes