Mettre une url dans IB

13»

Réponses

  • ClicCoolClicCool Membre
    18:42 modifié #62
    dans 1096279931:

    Ouais, en fait le textObject est un équivalent à  un outlet textView ?

    En tout cas, bravo !


    le textObject est un NSText * qui pointe sur le NSText ayant provoqué l'appel à  textShouldEndEditing, en l'occurence ta NSTextView (sous classe de NSText).
    Ce n'est pas un outlet mais il pointe bien quand même :)

    Manque plus qu'un bon tireur et on se faire une bonne équipe de pétanque ;D
  • ClicCoolClicCool Membre
    18:42 modifié #63
    dans 1096279931:

    EDIT : j'ai un warning si je mets textView :  passging arg 1 from incompatible pointer type

    Oui en effet faut typeCaster.
    Car ta fonction hiliteMachinTruc a besoin d'un NSTextView (appel à  textStorage).

    donc ici tu typeCast comme ceci:
    - (BOOL)textShouldEndEditing:(NSText *)textObject {
       [self hiliteAndActivateURLs:(NSTextView*) textObject ];
       return YES;
    }


    dans 1096279931:

    , d'autre parts, ça ne semble pas la meilleure des solutions parce que j'ai 3 outlets en fait qui doivent subir cette fonction.


    Si tu as d'autres textView devant gérer ce même processus, c'est une raison de plus pour se passer des outlets (ça en fait 3 de moins)
    La méthode textShouldEndEditing te renvérra à  chaque fois comme argument la NSText en cours d'édition et donc la bonne parmis les 3 TextView possibles.

    Si par contre tu fais des traitement différents en fonction de la TextView concernée, gardes tes outlets pour les comparer à  l'argument NSText passé et décider en fonction de la suite à  donner :D
  • muqaddarmuqaddar Administrateur
    septembre 2004 modifié #64
    Merci pour toutes ces infos maà®tre !

    Seulement, je ne comprends pas pourquoi seul le textView des sites marche et pas les autres...

    Je ne me sers plus des outlets, donc ça devrait marcher pour tous les textView...
  • ClicCoolClicCool Membre
    18:42 modifié #65
    T'as bien déclaré ton AppController comme délégate de tes texView au moins ?  ;D
  • muqaddarmuqaddar Administrateur
    septembre 2004 modifié #66
    dans 1096285264:

    T'as bien déclaré ton AppController comme délégate de tes texView au moins ?  ;D


    Euh... hein ? oui, non, j'en sais rien, comment ?... :(

    Bon sinon j'ai essayé de refaire la fonction qui permet de mettre enforme le texte UNIQUEMENT si celle-ci commence par "http://"; donc rien avant. Voilà  ce que ça donnerait, dis moi où j'ai faux. :-)

    //mettre en forme une URL qui COMMENCE par http:// uniquement<br />- (void)activateURL:(NSTextView*)textView {<br />    <br />  //on met le contenu de l&#39;outlet textView dans un textStorage<br /> NSTextStorage *textStorage=[textView textStorage];<br />        //puis dans une string<br />    NSString *string = [textStorage string];<br />  //enfin dans un NSRange pour permettre de travailler sur la chaine du textStorage<br /> NSRange chaineEntiere=NSMakeRange(0, [string length]);<br />    //chaine recherchee dans la chaine entiere<br />        NSRange whereIsHttp=[string rangeOfString:@&quot;http://&quot; options:0 range:chaineEntiere];<br />    <br />  //DEBUT DE L&#39;EDITION<br /> //optimise une série de changements (pas bien compris pourquoi ?)<br /> [textStorage beginEditing];<br />       <br />  //il faut que le texte commence par http donc à  la &quot;location 0&quot; de la chaine<br />    if (whereIsHttp.location == 0) {<br />          <br />          //alors toute la chaine devient URL<br />               NSURL *monURL=[NSURL URLWithString:string];<br /><br />         //attributs de mise en forme<br />              NSDictionary *attributsDeLien = [NSDictionary dictionaryWithObjectsAndKeys: monURL, NSLinkAttributeName,<br />                                                                          [NSNumber numberWithInt:NSSingleUnderlineStyle], NSUnderlineStyleAttributeName,<br />                                                                           [NSColor blueColor], NSForegroundColorAttributeName, NULL];<br />               <br />          //que l&#39;on applique sur toute la chaine<br />              [textStorage addAttributes:attributsDeLien range:chaineEntiere];<br />  }<br /> else {<br />            //appel d&#39;un message d&#39;alerte pour dire que l&#39;url est mauvaise<br />     }<br /> <br />  //FIN D&#39;EDTION<br />       //fin de l&#39;optimisation des changements<br />      [textStorage endEditing];<br />}
    
  • muqaddarmuqaddar Administrateur
    septembre 2004 modifié #67
    C'est chiant, ça garde pas correctement les tabulations dans le forum... dommage pour la présentation.  :why?:
  • ClicCoolClicCool Membre
    18:42 modifié #68
    dans 1096287304:

    dans 1096285264:

    T'as bien déclaré ton AppController comme délégate de tes texView au moins ?  ;D


    Euh... hein ? oui, non, j'en sais rien, comment ?... :(


    Comme pour ton autre textField tu y déclare ton AppController
    comme étant son délégué avec [monTextView setDelegate] ou bien sous IB en ctr-dragant du textView vers l'Appctrl et en connectant sur l'outlet "delegate" de l'AppCtrl.

    dans 1096287304:

    Bon sinon j'ai essayé de refaire la fonction qui permet de mettre enforme le texte UNIQUEMENT si celle-ci commence par "http://"; donc rien avant. Voilà  ce que ça donnerait, dis moi où j'ai faux. :-)


    En fait ton (tes) champ(s) ne sont sensés n'héberger que des URLs ??

    Si c'est le cas, ne te casses pas à  chercher les caractères "http..." ne te casses même pas à  taper ces début d'url et écrit une méthode qui ajoute automatiquement "http://www."; au début de ce qui est saisi pour en faire une url mais sans afficher ces caractères disgracieux et inutiles à  la lecture.

    //mettre en forme une URL qui COMMENCE par http:// uniquement<br />- (void)activateURL:(NSTextView*)textView {<br />    <br />  //on récupère le textStorage de la TextView<br />       NSTextStorage *textStorage=[textView textStorage];<br />        //on récupère la string contenue dans le textStorage<br />      NSString *TVString = [textStorage string];<br />        <br />  //DEBUT DE L&#39;EDITION<br /> // pas utile ici, ça sert à  ne pas déclencher une mise à  jours de l&#39;interface graphique    //à  chaque petites modifications faisant partie d&#39;un tout.<br />   //(ça bloque l&#39;affichage le temps qu&#39;on termine nos changements)<br />        // [textStorage beginEditing];<br />            <br />  NSString * URLString = @&quot;http://www.&quot;;<br />  URLString = [URLString stringByAppendingString: TVString];<br />        NSURL *monURL=[NSURL URLWithString: URLString];<br /><br />     //attributs de mise en forme<br />      NSDictionary *attributsDeLien = [NSDictionary dictionaryWithObjectsAndKeys:                                                                             monURL, NSLinkAttributeName,<br />                                                                              [NSNumber numberWithInt:NSSingleUnderlineStyle], NSUnderlineStyleAttributeName,<br />                                                                           [NSColor blueColor], NSForegroundColorAttributeName, NULL];<br />               <br />  //que l&#39;on applique sur toute la chaine<br />      [textStorage addAttributes:attributsDeLien range:NSMakeRange(0,[TVString length])];<br /><br /> //FIN D&#39;EDTION<br />       //fin de l&#39;optimisation des changements<br />      // Inutile donc ici mais ça permet de dire à  l&#39;interface graphique qu&#39;elle peut<br /> // reprendre les mise à  jours de l&#39;affichage<br /> //[textStorage endEditing];<br />}
    


    Bon je l'ai écrit directement dans le post, sans vérifier la typo, mais l'idée est là  et à  mon avis c'est de loin ce qu'il te faut simple à  coder et simple à  l'utilisateur :D

    P.S. effectivement chez moi non plus la tabulation du code n'est pas droite ???
  • muqaddarmuqaddar Administrateur
    18:42 modifié #69
    Bein dans IB, j'avais oublié de double-cliquer dans le textView avant de ctrl-draguer... je me fais encore avoir  :-\

    J'ai pas regardé ton code, mais si je fais ajouter "http://", il faut que ej regarde si le mec l'a pas écrit déjà ...
  • ClicCoolClicCool Membre
    septembre 2004 modifié #70
    A moins que tu ne le prévienne de ne pas tapper le "http://www."; initial, voire que tu ajoute une étiquette non saisissable avant le champ "http://www.";

    [EDIT] c'est rigolo, dès qu'on écrit "http://www."; le site considère que c'est un lien valide et il l'active ;) il est pas tellement plus fort que nous ce monsieur smf ;D

    Allez, encore une fois, juste pour rire: Bouh !! "http://www."  ;D ;D ;D :P :P >:D >:D
  • TiffTiff Membre
    18:42 modifié #71
    C'est quoi votre lien secret ? Il ne marche pas ?
    :o

    [Fichier joint supprimé par l'administrateur]
  • TiffTiff Membre
    18:42 modifié #72
    ;D ;D ;D
    Un cachet, et au lit !
  • muqaddarmuqaddar Administrateur
    18:42 modifié #73
    dans 1096312481:

    A moins que tu ne le prévienne de ne pas tapper le "http://www."; initial, voire que tu ajoute une étiquette non saisissable avant le champ "http://www.";


    Je suis chiant mais ça ne peut aller. :-) Pour ouvrir, l'url correctement dans le navigateur, il faut qu'il y ait http:// dans l'url donc pas dans une étiquette, donc il faut que le mec le tape, et que ça le rajoute QUE s'il n'y est pas déjà .
  • muqaddarmuqaddar Administrateur
    18:42 modifié #74
    A ce moment là , il vaut mieux de bien recherche http:// et d'avertir l'utilisateur si ce n'est pas tapé non ?
  • ClicCoolClicCool Membre
    18:42 modifié #75
    Mais non Oxitan, le (allez encore un ptit coup pour smf) "http://www."; est bel et bien présent dans ton lien, il n'est pas tappé ni affiché.

    Regardes bien le code et surtout essaies le.
    l'url sera par ex: http://www.objective-cocoa.org (bel est bien écrit dans le NSURL)
    mais le texte tapé sera seulement objective-cocoa.org, ce qui à  mon sens est nettement plus convivial.

    Exactement comme sur ce lien ici là  que voici voila: objective-cocoa.org

    Tu peux cliquer dessus, même si tu ne vois pas écrit http//... bon j'arrète OK ;D
  • muqaddarmuqaddar Administrateur
    18:42 modifié #76
    Bon ça marche.
    Merci mon ClicCool de ne pas avoir lâcher prise tout au long de ce sujet.
  • ClicCoolClicCool Membre
    18:42 modifié #77
    :crackboom:-  :D
  • TiffTiff Membre
    18:42 modifié #78
    6 pages ! C'est un record ?
Connectez-vous ou Inscrivez-vous pour répondre.