UIPopoverController

muqaddarmuqaddar Administrateur

Vous êtes nombreux à  utiliser UIPopoverController ?


 


Pour ma part, je l'ai utilisé pas mal jusqu'à  iOS 6, mais je trouve maintenant que ça se marie assez mal au design "FLAT". De plus, son implémentation est plus compliquée que d'ouvrir un VC dans une modale form sheet par exemple. Bref, je trouve que ce n'est pas aussi propre qu'une modale.


 


Par exemple, pour classer une liste, on peut afficher une UIPopover pour afficher les tris possibles (date, nom, prénom...etc). On pourrait imaginer la même chose dans un VC ouvert dans une petite modale. Je trouve que c'est plus propre, et plus rigoureux.


 


Maintenant, pour afficher le panel impression où il n'y a que 2 lignes, je comprends l'utilité du Popover. Reste que j'ai envie de les remplacer dans 80% des cas.


 


Bref, je n'ai jamais été friand, ni du design, ni de l'utilité réelle des UIPopoverController sur iPad.


 


 


Réponses

  • CéroceCéroce Membre, Modérateur
    Il a quand même un avantage sur une modale: toucher à  l'extérieur permet de le fermer. C'est moins intrusif pour l'utilisateur.
  • muqaddarmuqaddar Administrateur


    Il a quand même un avantage sur une modale: toucher à  l'extérieur permet de le fermer. C'est moins intrusif pour l'utilisateur.




     


    Oui et non.


    Dans un cas on tu changes un tri, tu peux demander à  la modale de se fermer au même moment. Donc ça dépend des cas.

  • Joanna CarterJoanna Carter Membre, Modérateur
    octobre 2014 modifié #4

    Je les utilise partout dans les applis iPad pour les petits claviers numériques


  • Pour ma part je les trouve pratique quand il faut choisir des paramètres à  répétition sur une page d'accueil où l'on sélectionne les caractéristiques d'un projet par exemple. L'animation de la form sheet à  répétition donne un effet désagréable de vues qui dansent sans arrêt à  l'écran et ça donne le mal de mer passé trois ouvertures/fermetures rapides je trouve, alors que l'animation de popover est moins désagréable et reste très pratique.
  • AliGatorAliGator Membre, Modérateur
    Perso je les utilise plutôt pour des actions contextuelles sur des apps iPad.

    Exemple :
  • Joanna CarterJoanna Carter Membre, Modérateur

    Perso je les utilise plutôt pour des actions contextuelles sur des apps iPad.Exemple :




    Génial ! Comment definies-tu les rectangle d'origine ?
  • muqaddarmuqaddar Administrateur


    Pour ma part je les trouve pratique quand il faut choisir des paramètres à  répétition sur une page d'accueil où l'on sélectionne les caractéristiques d'un projet par exemple. L'animation de la form sheet à  répétition donne un effet désagréable de vues qui dansent sans arrêt à  l'écran et ça donne le mal de mer passé trois ouvertures/fermetures rapides je trouve, alors que l'animation de popover est moins désagréable et reste très pratique.




     


    On n'est pas obligé d'animer la form sheet il me semble. Moins de mal de mer.

  • muqaddarmuqaddar Administrateur


    Perso je les utilise plutôt pour des actions contextuelles sur des apps iPad.


    Exemple :
    attachicon.gifPopupCivility.pngattachicon.gifPopupContrat.png

     




     


    Ce cas est en effet intéressant.

  • muqaddarmuqaddar Administrateur
    octobre 2014 modifié #10

    Pour le cas que je cite, c'est-à -dire trier une liste, et donc que la Popover affiche une TableView contenant 20 options de tri, l'autre inconvénient, c'est que de toute façon il y a une modale sur l'iPhone pour la même fonction. Cela permettrait aussi d'économiser du code.


     


    Et puis comme je disais au début, l'aspect esthétique me gène.


  • AliGatorAliGator Membre, Modérateur
    octobre 2014 modifié #11

    Génial ! Comment definies-tu les rectangle d'origine ?

    Ma zone est une UITextView, et UITextView se conforme au protocole UITextInput.
    Or il y a tout ce qu'il faut dans ce protocole pour déduire une frame à  partir du NSRange des caractères tapés.

    La difficulté c'est que UITextInput manipule ces bizarreries que sont UITextPosition et UITextRange... et non pas des NSRange. Donc la conversion ne saute pas aux yeux. Mais bon, on s'en sort quand même, et au final ça donne ça :
    - (CGRect)frameOfTextRange:(NSRange)range inTextView:(UITextView *)textView
    {
    UITextPosition *beginning = textView.beginningOfDocument;
    UITextPosition *start = [textView positionFromPosition:beginning offset:range.location];
    UITextPosition *end = [textView positionFromPosition:start offset:range.length];
    UITextRange *textRange = [textView textRangeFromPosition:start toPosition:end];
    CGRect rect = [textView firstRectForRange:textRange];
    return [textView convertRect:rect fromView:textView.textInputView];
    }
    PS : Le NSRange je le récupère dans la méthode de delegate "textView:shouldInteractWithURL:inRange:" (iOS7+) qui est appelée quand l'utilisateur tap sur un lien (texte avec attribut NSLinkAttributeName) de ma NSAttributedString.

    S'il faut supporter iOS6 on peut aussi se débrouiller avec un UITapGestureRecognizer -> CGPoint tapé -> UITextPosition = [textView closestPositionToPoint:point] -> offset du caractère tapé -> NSLinkAttributeName + longestEffectiveRange de ce caractère dans la NSAttributedString.
  • Eric P.Eric P. Membre
    octobre 2014 modifié #12

    Bonsoir à  tous,


     


    Je les utilise également soit comme des menus ou en action contextuelle, exemples :


    UIPopover1.pngUIPopover2.png


     


    Voilà .


     


    Edit : Désolé je n'ai pas trouvé comment afficher les images en miniatures...

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