[Résolu] Paramétrage d'un panneaux d'alerte

prepa75prepa75 Membre
mars 2010 modifié dans API AppKit #1
Bonsoir tout le monde;

en Utilisant le livre j'ai copié l'exemple pour l'affichage d'un panneau.

Voici mon code :
<br /><br />-(void)alertEnded:(NSAlert *)alert<br />code:(int)choice<br />context:(void*)v<br />{}<br /><br /><br />- (IBAction)panneaualerte:(id)sender<br />{<br />	NSAlert *alert = [NSAlert alertWithMessageText:@&quot;-- Aide du jeu --&quot; <br />									 defaultButton:@&quot;OK&quot; <br />								&nbsp;  alternateButton:nil <br />									&nbsp;  otherButton:nil <br />						 informativeTextWithFormat:@&quot;Choisissez une opération et la difficulté puis commencez le jeu.&#092;nLe but étant d&#39;avoir le meilleur score; pour cela répondez avant les 15 secondes accordées.&#092;nSi vous avez 10 mauvaises réponses,alors le jeu s&#39;arrête.&#092;nPour recommencer : cliquez sur Initialiser. &quot;];<br />	<br />	[alert beginSheetModalForWindow:nil<br />					&nbsp; modalDelegate:self<br />					 didEndSelector:@selector(alertEnded:code:context:) <br />						contextInfo:NULL];<br />}<br />


voici mes questions :

1 - comment fait-on pour passer à  la ligne sous Xcode lorsque je tape dans le informativeTextWithFormat: ?Lorsque je passe à  la ligne il me met des erreurs de partout  :(

2 - je n'ai pas compris -(void)alertEnded:(NSAlert *)alert , a quoi sert code et context??

3 - a quoi sert cette ligne :
[alert beginSheetModalForWindow:nil<br />					&nbsp; modalDelegate:self<br />					 didEndSelector:@selector(alertEnded:code:context:) <br />						contextInfo:NULL];
  ???

Merci pour vos réponses  :D

Réponses

  • AliGatorAliGator Membre, Modérateur
    20:31 modifié #2
    1) Dans du code source, tu ne peux pas couper une chaà®ne en passant à  la ligne en plein milieu.

    Tu as bien mis les "\n" pour que les retours chariot soient affichés quand ta NSAlert sera affichée à  l'écran. J'imagine que ta question portait sur le passage à  la ligne uniquement dans le code source pour la présentation et lisibilité de ton code, pour pas avoir à  scroller horizontalement ta fenêtre Xcode ?

    Tu as bien une solution pour cela : il est possible en effet de fermer le guillemet et de le réouvrir juste après :
    NSString* toto = @&quot;ceci est une chaine qui tient sur &quot;<br />&quot;plusieurs lignes du code source.&#092;nCeci revient &quot;<br />&quot;exactement au même que de mettre &quot;<br />&quot;tout sur une ligne&quot;;
    
    Ecrire le texte comme ça dans ton code revient au même que tout mettre sur une ligne : il n'y aura pas de retour à  la ligne dans ta chaà®ne entre le "sur" et le "plusieurs", ni entre le "revient" et le "exactement" ou entre "mettre" et "tout". Par contre bien sûr il y aura bien le retour chariot "\n" entre "code source." et "Ceci". Cette syntaxe ne permet donc que de rendre le tout plus lisible dans ton code source.
  • mpergandmpergand Membre
    20:31 modifié #3
    1)
    Il y a deux méthodes: le backSlash en fin de ligne (valable pour les macros)
    @Choisissez une opération et la difficulté puis commencez le jeu.\n\
    Le but étant d'avoir le meilleur score; pour cela répondez avant les 15 secondes accordées.\n\
    Si vous avez 10 mauvaises réponses,alors le jeu s'arrête.\n\
    Pour recommencer : cliquez sur Initialiser. "];

    et la concaténation de chaines:

    @Choisissez une opération et la difficulté puis commencez le jeu.\n
    @Le but étant d'avoir le meilleur score; pour cela répondez avant les 15 secondes accordées.\n
    @Si vous avez 10 mauvaises réponses,alors le jeu s'arrête.\n


    2) c'est marqué dans la doc:
    where alert is the NSAlert object, returnCode specifies which button the user pressed, and contextInfo is the same contextInfo passed in the original message. returnCode identifies which button was used to dismiss the alert (see this method's “Special Considerations” section). The modal delegate determines which button was clicked (“OK”, “Cancel”, and so on) and proceeds accordingly.

    L'objet contextInfo peut servir à  passer des infos supplémentaires en fonction de l'alerte.

    3)
    A afficher l'alerte en mode sheet, mais comme pour tu as mis nil pour le 1er paramètre, ben elle va s'afficher comme en mode modal ...
  • prepa75prepa75 Membre
    20:31 modifié #4
    merci pour vos réponses 

    je trouve bête de taper du code sans le comprendre  :P

    une autre question  : peut-on choisir ou est-ce que la fenêtre va apparaitre sur l'écran?
  • mpergandmpergand Membre
    20:31 modifié #5
    dans 1269548777:


    une autre question  : peut-on choisir où est-ce que la fenêtre va apparaitre sur l'écran?


    En mode sheet ou en mode modal ?
  • AliGatorAliGator Membre, Modérateur
    20:31 modifié #6
    Petite précision sur la réponse de mpergand : pour la concaténation de chaà®nes, il ne faut pas remettre le @ à  chaque fois (que au tout début du premier guillemet)

    Sinon en effet pour le 2 et le 3 c'est indiqué dans la doc. Dans "alertEnded:code:context:"
    - code contient le code de retour indiquant quel bouton a été cliqué
    - context contiendra exactement que ce que tu as mis dans le paramètre "context" quand tu as appelé "beginSheetModalForWindow:delegate:didEndSelector:context:"
    Tu peux mettre ce que tu veux comme context quand tu appelles beginSheetModalMachin, ça sera repassé à  la méthode alertEnded:code:context:
    Tu peux tout à  fait ne pas t'en servir, et le mettre à  NULL, mais parfois ça peut servir pour passer des données d'une méthode à  l'autre
  • prepa75prepa75 Membre
    20:31 modifié #7
    et bien je ne sais pas trop  ???
    j'aurais bien aimer une petite explication dans le livre mais c'est assez succin,il pose un exemple et je ne sais pas trop la différence entre les deux...

    tu pourrais me donner la différence en gros ?

    merci par avance et désolé pour le "ù" , je sais que c'est pas une excuse mais je l'ai pas trouvé sur le clavier  :o non en fait c'est nul j'avoue ....  :o   :o
  • prepa75prepa75 Membre
    20:31 modifié #8
    Ok merci Ali,

    en effet c'est précisé dans la doc. Je commence à  avoir le réflexe d'aller y jeter un coup d'oeil mais je m'y perd facilement...
  • prepa75prepa75 Membre
    20:31 modifié #10
    Merci En effet la doc est toujours aussi importante  bon je la potasse et je reviens si j'ai des questions  ;)
  • AliGatorAliGator Membre, Modérateur
    20:31 modifié #11
    Ne pas oublier qu'il n'y a pas que la doc des classes en question.
    La documentation de la classe (en l'occurrence NSAlert) est un point de départ évidemment, mais ne surtout pas oublier les Programming Guides, qui sont une source de documentation bien plus détaillée, qui donne tous les principes et non pas juste que la liste des méthodes.

    En haut de la documentation de chaque classe, tu as un petit en-tête qui indique entre autre la liste des "Companion Guides".
    En l'occurrence pour NSAlert, il y a donc ces deux Companion Guides à  lire :
    - Dialogs and Special Panels
    - Sheet Programming Topics for Cocoa

    Dans ces documentations tu auras toutes les réponses à  tes questions.
    Entre autres ça explique la différence entre une fenêtre modale "classique" et une "sheet", avec des captures et tout.


    [EDIT] Grillé par mpergand :P
  • prepa75prepa75 Membre
    20:31 modifié #12
    Oui Oui bien sur  ;)

    je me rend compte à  force de l'ouvrir et de la fermée (la doc... ::) ) que les codes dits "codes simples" sont vraiment super compressés et qu'il me reste que les explications des classes et les Programming Guides pour y comprendre quelquechose  B)

    je vous tiens au jus dans la semaine si j'ai des questions  :P

    et encore merci pour votre patience 
Connectez-vous ou Inscrivez-vous pour répondre.