[SWIFT] Infobulle ?

Bonjour,


 


J'ai un petit soucis qui demande reflexion..


J'utilise Eureka pour générer un formulaire.. certains champs de mon formulaire ont une infobulle..


 


Comment rendre ça utilisable ?


En fait le soucis, c'est que lorsque je clic sur un champ, je rentre en mode "Edition" (pour changer la valeur du champ).. du coup j'ai aucun moyen d'afficher l'infobulle..


 


J'ai pensé à  plusieurs méthodes : 


 


- Un appuie long sur le champ pour afficher l'infobulle ? (problème : je récupère bien la position de l'appuie long mais j'ai aucun moyen de retrouver le champ sur lequel ça a été fait)


 


- Mettre un emoji et detecter l'appuie sur lui pour afficher l'infobulle ? possible ?


 


Comment gérer vous les infobulles dans vos projets ? ça m'aiguillera peut-être :)


Mots clés:

Réponses

  • Personnellement je n'utilise pas d'info bulle dans mes projets mais qu'importe.


     



    - Un appuie long sur le champ pour afficher l'infobulle ? (problème : je récupère bien la position de l'appuie long mais j'ai aucun moyen de retrouver le champ sur lequel ça a été fait)



     


    Pourquoi n'as tu pas la possibilité de faire matcher l'endroit où appuie le user et la position de chaque composant ?


    En tout cas j'aime beaucoup l'idée mais faut il encore que l'utilisateur soit au courant de cette fonctionnalité...  ::)


     



    - Mettre un emoji et detecter l'appuie sur lui pour afficher l'infobulle ? possible ?



     


    Oui tu peux éventuellement envisager cette solution. Le plus simple serait d'utiliser un bouton (UIButton) et setter ton image en son sein.


  • InsouInsou Membre
    août 2016 modifié #3

    Pourquoi n'as tu pas la possibilité de faire matcher l'endroit où appuie le user et la position de chaque composant ?



     


    Parce que je ne sais pas si c'est possible ou pas  xd


     


    J'ai vu que c'était possible pour une tableview (http://stackoverflow.com/questions/30839275/how-to-select-a-table-row-during-a-long-press-in-swift) avec : 



    let touchPoint = longPressGestureRecognizer.locationInView(self.view)
    if let indexPath = tableView.indexPathForRowAtPoint(touchPoint) {
    // your code here, get the row for the indexPath or do whatever you want
    }

    Mais je n'ai aucune idée de comment faire correspondre ma position avec mon champ .. si quelqu'un à  une idée pour ça, c'est pas de refus et en effet, ça faciliterai le truc ^^


     



    En tout cas j'aime beaucoup l'idée mais faut il encore que l'utilisateur soit au courant de cette fonctionnalité...   ::)



     


    J'mettrai une infobulle sur une infobulle pour les prévenir  ;D


    (j'comptais mettre un emoji assez parlant pour qu'ils cliquent dessus.. un "?" ou un truc du style, que ça rappelle un peu les formulaires sur le net)


     


    Le plus simple serait d'utiliser un bouton (UIButton) et setter ton image en son sein.

     


    C'est possible de mettre un bouton à  la place du label qui est attendu ?


    Je vais faire quelques tests dans ce sens voir si ça me débloque :)


     


    Merci de ton intérêt à  mon problème en tout cas ^^


  • CéroceCéroce Membre, Modérateur
    août 2016 modifié #4

    Comment gérer vous les infobulles dans vos projets ? ça m'aiguillera peut-être :)

    Nous ne faisons pas d'info-bulles!
    Disons que les info-bulles, sur les ordinateurs de bureau, apparaissent lors d'un survol du pointeur de la souris. Difficile de reproduire la même expérience pour l'utilisateur.

    Comme l'écrivait jguimberteau, une pression longue semble également une assez mauvaise idée, parce que c'est assez difficile à  découvrir pour l'utilisateur.

    Considère ces alternatives:
    - un UITextField a une propriété .placeholder, qui est le texte affiché tant que rien n'est saisi dans le champ. Souvent, ça convient.
    - tu peux écrire des indications au dessus ou en dessous du champ, par exemple, dans une couleur moins contrastée.

    À trop te concentrer sur cette solution des info-bulles, tu t'éloignes du besoin. Prends du recul, en reconsidérant à  quoi sert une info-bulle et si elle est vraiment nécessaire.

    Par exemple, si tu as un champ appelé e-mail, et une info-bulle qui dit " Saisissez ici votre adresse e-mail ", je questionnerais son utilité ;-)
  • InsouInsou Membre
    août 2016 modifié #5

    Pour le placeholder, c'est pas possible dans mon cas (et les infobulles sont parfois tellement longues que c'est plus lisible)


     


    Pour les infobulles, j'comptais utiliser ça : https://github.com/teodorpatras/EasyTipView


     


    Comme l'écrivait jguimberteau, une pression longue semble également une assez mauvaise idée, parce que c'est assez difficile à  découvrir pour l'utilisateur.

     


    Il y aura aussi un emoji en plus quand l'infobulle sera disponible.. c'est sûr que c'est peut-être pas la meilleure idée mais si ça fonctionne, je me débrouillerai pour inclure un tuto pour expliquer ça si il le faut ^^


     


    Par contre, pour ce qui est de mettre un bouton dans le label, impossible..


    Le paramètre pour mettre le label ne prend qu'un type String :/


     


    À trop te concentrer sur cette solution des info-bulles, tu t'éloignes du besoin. Prends du recul, en reconsidérant à  quoi sert une info-bulle et si elle est vraiment nécessaire

     


    Dans mon cas, elles sont vraiment nécessaire, c'est pas du tout pour indiquer qu'il faut inscrire un e-mail dans le champ "e-mail" (le placeholder fait déjà  bien son boulot :P)




  • Par contre, pour ce qui est de mettre un bouton dans le label, impossible..


    Le paramètre pour mettre le label ne prend qu'un type String :/




     


    Vrai... Mais tu peux prendre un bouton et adapter son design de telle sorte qu'il prenne l'apparence de ton label. Ou alors, tu as la possibilité d'intercepter une interaction utilisateur avec ton label (exemple, lorsqu'il appuie dessus).


     


    Les deux propositions me semblent bien plus simples à  mettre en ouvre que de localiser où ton user appuie et en déduire le Label concerné. 

  • InsouInsou Membre
    août 2016 modifié #7

    Ou alors, tu as la possibilité d'intercepter une interaction utilisateur avec ton label (exemple, lorsqu'il appuie dessus).



     


    Ah bah oui voila ce que j'essaie de faire mais j'y arrive pas  :(


    Une idée, une piste pour me débloquer ? ^^





  •  


    Aaaah mais cet exemple là  (j'étais déjà  tombé dessus), oui en effet, ça rend un label cliquable mais dans mon code j'utilise Eureka, qui génère des items (LabelRow, PushRow, MultipleSelectorRow, TextRow, SwitchRow, TimeRow, DateRow, etc etc) et j'ai pas la main sur le clic... enfin si, j'ai la main pour détecter un clic sur la cellule.. mais pas sur le libellé précisément, c'est bien là  le soucis ;)


    Lorsque je clic sur la cellule, je rentre en mode "Edition" de la cellule (et je veux garder ce comportement aussi)..


     


    Donc l'idée était de rendre le label de la cellule cliquable et ça, j'sais pas si c'est possible :s

  • Lorsque tu cliques sur la cellule tu souhaites d'une part afficher l'info bulle et rendre le champ saisissable ?  ???


  • Nan, j'aimerai avoir 2 comportements.. lorsque je clic sur le libellé, ça affiche l'infobulle, si je clic ailleurs dans la cellule, ça édite le champs..


  • Tu as la possibilité de connaà®tre précisément où se situe ton label (coordonnées graphiques) ? Si oui, vu que tu connais l'endroit où "clique" l'utilisateur, tu peux en déduire quel Label est concerné.


    Cependant, comme nous l'évoquions hier avec Céroce, ce n'est pas forcément très ergonomique. Comment peut il savoir quel label est concerné par une info bulle ou non ? L'option que tu proposé de mettre un bouton avec une image me semble plus approprié.


  • InsouInsou Membre
    août 2016 modifié #13

    Tu as la possibilité de connaà®tre précisément où se situe ton label (coordonnées graphiques) ? Si oui, vu que tu connais l'endroit où "clique" l'utilisateur, tu peux en déduire quel Label est concerné.



     


    Bah j'sais pas vraiment comment trouver la position de mon label :s 


     


    Comment peut il savoir quel label est concerné par une info bulle ou non ?

     


    Le label aura un icône ou un truc bien visible.. c'est pas ce qui m'inquiète le plus ^^


     


    L'option que tu proposé de mettre un bouton avec une image me semble plus approprié.

     


    Bah oui, moi aussi j'trouvais ça mieux mais les items d'Eureka ne prennent qu'un String comme paramètre pour le nom du libellé :s


  • Joanna CarterJoanna Carter Membre, Modérateur

    Si tu veux utiliser les outils "quick and dirty" comme Eureka, tu seras toujours frustré en faisant plus qu'il t'offre.


     


    De mon avis, tu a une choix :


     


    1. Soit tu gagnes du temps en utilisant Eureka


     


    2. Soit tu fasses un appli plus "sur mesure" en faisant les vues par main (c'est pas très difficile)


  • Qu'entends tu par : en faisant les vues par main ?


     


    Ce qui est pratique avec Eureka, c'est qu'il dispose d'une bibliothèque d'item préfabriqué..


    et dans mon projet, je récupère une liste d'item (checkbox, textfield, combo, etc etc) que je créer à  la volée avec Eureka.


    En gros, chaque formulaire dans mon projet est créer à  la volée, je n'ai rien de "fixe"


    Donc je sais pas si "faire les vues par main" veut dire "faire des formulaires fixes" mais si c'est le cas, je ne peux pas :/


    Alors après oui, je peux me faire une fonction qui me créer mes items "sur mesure".. mais j'redéveloppe Eureka à  ma sauce après.. c'est pas le but :p


  • Joanna CarterJoanna Carter Membre, Modérateur

    Normalement, pour faire les "formulaires" dynamiques, tu utiliserais une UITableView, en créant les cellules selon tes données.


     


    C'est facile à  créer les cellules sur mesure et les instancier selon ce que tu veux.


  • J'veux bien te croire mais là  c'est un projet que je reprends et il est trop avancé pour que je refasse tout ça..


    ça fait parti des contraintes techniques :s


  • Joanna CarterJoanna Carter Membre, Modérateur

    Je viens de regarder le repo pour Eureka sur GitHub. Ce n'est qu'un emballage d'une UITableView dont tous les "rows" sont UITableViewCells.


     


    La classe FormViewController contient tous le code de UITableViewDelegate et UITableViewDataSource. Du coup, si tu veux accéder les "rows", il ne faut que dériver de FormViewController et surcharger les méthodes de delegate et dataSource.


     


    Tous les "rows" sont, en fait, UITableViewCell. Tu peux accéder tous les sous-vues en appelant cell.contentView.subviews...


     


    De ce que j'ai compris du documentation sur Eureka, c'est même possible de construire tes propres "rows" depuis n'importe quelle vue

  • InsouInsou Membre
    août 2016 modifié #19

    De ce que j'ai compris du documentation sur Eureka, c'est même possible de construire tes propres "rows" depuis n'importe quelle vue



     


    Oui, c'est ce que j'ai cru comprendre aussi et d'après l'auteur d'Eureka, je peux faire ce que je veux en créant un "custom row" et je devrais le faire pour chaque type sauf que j'ai aucune idée de comment en faire un déjà  :s


     


    J'vais continuer de me documenter et faire des tests dans ce sens en croisant les doigts ^^


Connectez-vous ou Inscrivez-vous pour répondre.