NSString et NSURL

Old SaltOld Salt Membre
01:54 modifié dans API AppKit #1
Je récupère la page d'un site avec la méthode -initWithContentsOfURL de NSString.
Je souhaiterais désactiver le bouton qui lance le chargement, pendant la durée du chargement (donc en le réactivant à  la fin). Mais le bouton n'apparaà®t désactivé à  l'écran que lorsque la méthode "rend la main".
Pourtant, je lance, en même temps que la désactivation du bouton, un NSProgressIndicator (du type "roue", avec -startAnimation) qui, lui, apparait tout de suite.
Alors, pourquoi la roue apparaà®t-elle tout de suite, mais pas le changement d'état du bouton ? :why?:
Merci.

Réponses

  • amnesicamnesic Membre
    01:54 modifié #2
    pour le bouton tu dois faire un [myButton setEnabled:false] j'imagine ? ...mais il ne changera son apparence qu'au prochain passage dans la runLoop.... bref rajoute un [myButton display] après l'avoir désactivé pour "forcer" l'affichage ...mais le plus logique si ta fonction est bloquante longtemps serait de la faire dans un thread.
  • Old SaltOld Salt Membre
    01:54 modifié #3
    Merci amnesic, ça fonctionne au poil.
    J'avais déjà  regardé "display" mais avais cru comprendre qu'il fallait l'appliquer à  la fenêtre et je n'y étais pas parvenu.
  • Old SaltOld Salt Membre
    mars 2005 modifié #4
    En fait, ça ne fonctionne pas si bien que ça, puisque le bouton reste cliquable alors qu'il apparaà®t bien comme étant désactivé...
    Ce n'est qu'une fois que le chargement est terminé, que le bouton devient réellement inactif (si je ne l'ai pas réactivé bien sûr).

    modif:
    Je constate que ce comportement n'est pas dû à  NSURL:
    <br />- (IBAction)actionOK:(id)sender<br />{<br />[myTextField setStringValue:@&quot;début&quot;];<br />[myTextField display];<br />[boutonOK setEnabled: NO];<br />[boutonOK display];<br /><br />int i;<br />for (i=1; i&lt;100000000; i++)<br />{}<br />	<br />[myTextField setStringValue:@&quot;fin&quot;];<br />[boutonOK setEnabled: YES];<br />}
    

    Si je clique plusieurs fois sur le bouton pendant qu'il est inactivé, la méthode est appelée plusieurs fois.
    Je suppose que les clics successifs sont gardés en mémoire et traités quand le bouton redevient actif; alors comment puis-je l'éviter ?

    ajout:
    Faut-il que j'intercepte tous les clics avec un NSEvent ?
  • mpergandmpergand Membre
    01:54 modifié #5
    Regarde du coté de discardEventsMatchingMask:beforeEvent:
    dispo dans NSApplication et NSWindow
  • Old SaltOld Salt Membre
    01:54 modifié #6
    Merci, je m'y plonge tout de suite.
Connectez-vous ou Inscrivez-vous pour répondre.