Texte avec mots sélectionnable
tazkeox
Membre
Bonjour,
Je suis entrain de développement une application iPad contenant des Quizz et j'ai un problème sur la façon de développer un type d'exercice.
J'aimerai afficher un texte et rendre chacun des mots contenus dedans sélectionnable. Le but de l'exercice est que l'utilisateur identifie les mots erronées dans le texte en cliquant dessus (un second click annulerait la sélection) et lorsque l'exercice se termine l'ensemble des mots sélectionnés est récupéré et comparé à une base de réponses correctes afin de valider ou non le succès.
J'aurai en entrée une NSString avec le texte souhaité (qui est variable bien entendue) et un NSArray contenant chaque réponse (mot erroné) sous forme de NSString.
Je pensais donc éventuellement parser le texte en entrée et de transformer chaque mot en bouton (prenant comme titlelabel la valeur du mot) et d'afficher ces boutons à la suite de manière à faire croire à un texte. Es-ce la bonne solution ? Si non, laquelle me conseillerez-vous ? Si oui comment afficher ces boutons de manière à faire penser à un texte ?
Je précise que je suis un développeur avec plusieurs expériences mais essentiellement les bases...
Merci beaucoup.
Amicalement,
tazkeox.
Je suis entrain de développement une application iPad contenant des Quizz et j'ai un problème sur la façon de développer un type d'exercice.
J'aimerai afficher un texte et rendre chacun des mots contenus dedans sélectionnable. Le but de l'exercice est que l'utilisateur identifie les mots erronées dans le texte en cliquant dessus (un second click annulerait la sélection) et lorsque l'exercice se termine l'ensemble des mots sélectionnés est récupéré et comparé à une base de réponses correctes afin de valider ou non le succès.
J'aurai en entrée une NSString avec le texte souhaité (qui est variable bien entendue) et un NSArray contenant chaque réponse (mot erroné) sous forme de NSString.
Je pensais donc éventuellement parser le texte en entrée et de transformer chaque mot en bouton (prenant comme titlelabel la valeur du mot) et d'afficher ces boutons à la suite de manière à faire croire à un texte. Es-ce la bonne solution ? Si non, laquelle me conseillerez-vous ? Si oui comment afficher ces boutons de manière à faire penser à un texte ?
Je précise que je suis un développeur avec plusieurs expériences mais essentiellement les bases...
Merci beaucoup.
Amicalement,
tazkeox.
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
L'idée des boutons me semble pas mal.
Je donne une piste comme ça, parce que ça me semble l'idée la plus rapide à mettre en place
L'idée est de récupérer la liste de tous les mots du texte, afin de calculer leurs positions d'affichage. Le code suivant te montre comment créer un tableau de mots à partir du texte.
Il suffit ensuite de faire une boucle pour traiter chaque mot.
La méthode sizeWithFont permet de connaà®tre la taille du rectangle graphique nécessaire à l'affichage d'un NSString.
CGSize taille = [mot sizeWithFont:font];
CGFloat largeur = taille.width;
CGFloat hauteur = taille.height;
Le calcul nécessite de connaà®tre la police de caractère utilisée pour l'affichage. Un texte en "Arial corps 12" n'aura pas la même taille qu'en "Times Bold corps 32".
Tu peux utiliser cette technique pour calculer le rectangle graphique occupé par chaque mot. Il ne reste ensuite plus qu'à stocker les coordonnées des "mauvais mots" dans un tableau de CGRect.
Pour détecter la sélection d'un "mauvais mot", il suffit juste de comparer la position de Touch avec la liste des CGRect stockés en mémoire.
Tu peux également matérialiser la sélection d'un mot en changeant sa couleur d'affichage.
Je ne t'ai pas donné le code complet, juste des pistes pour t'orienter dans la bonne direction.
ça fait 2 fois !!! Il va avoir les chevilles qui enflent !
N'ayant vu que la majorité ce matin (Pacifique Time oblige car j'étudie en ce moment sur San Francisco) j'avais fini par trouver une solution hier soir. Elle fonctionne très bien mais je ne suis pas sûr qu'elle soit réellement bien optimisée/propre. Là voici :
Qu'en pensez-vous ?
Merci encore.
(A part que ça me fait marrer de voir des trucs comme [tt][NSString stringWithFormat:@%@",labelButton][/tt]... pourquoi s'embêter à utiliser stringWithFormat et une chaà®ne de formattage, pourquoi ne pas directement utiliser labelButton ?! mais bon)
Après pour savoir si le mot cliqué est le bon ou le mauvais, je sais pas comment tu fais, si dans ton [tt]@selector(selectAnswerAction[/tt] tu te bases sur le texte du bouton c'est peut-être "dangereux" (par exemple si tu as 2 fois le même mot dans une phrase mais que le joueur ne doit en cliquer qu'un des deux...). Du coup tu peux soit chercher le sender dans ton buttonArray et récupérer l'index pour savoir l'index du mot cliqué... soit utiliser le "tag" du bouton (qu'il faut que tu affectes quand tu construis ta boucle du coup)...
Effectivement c'est inutile ici ^^
Je me base bien sur le texte du bouton et je n'avais pas penser à ce cas de figure Une fois l'exercice terminé je récupère tous les mots sélectionnés et vérifie leur validité grâce à une énumération du tableau des bonnes réponses. Si un mot est sélectionné deux fois alors le compte sera tout de même faux mais il est vrai que l'utilisateur pourra obtenir une réponse juste s'il sélectionne un des deux alors que ce n'est pas le bon...
Je vais voir pour cette solution oui; je n'ai pas l'habitude d'utiliser ce type de méthode mais ça à l'air plus approprié. Merci