2010-01-18 10 views
1

Hellow stackoverflow people, Je suis assez nouveau sur Cocoa. J'ai XCode 3.1Cocoa/Objective-C: Dessinez un rectangle sur un bouton Cliquez sur

Situation: J'ai une sous-classe NSObject: (AppController) avec une action, liée à un bouton. Puisqu'il y a une vue personnalisée, connectée à ma sous-classe NSView (AppView), dans la commande drawRect je dessine un rectangle (tout ça fonctionne), j'ai dans la fonction AppView.ma - (void) drawIt {..} qui dessine le rectangle. Pour l'instant, je l'ai appelé dans le - (void) drawRect ... avec [self drawIt]. Cela fonctionne aussi.

Ce que je veux faire maintenant est d'appeler drawIt quand le bouton est cliqué. (dans le AppController.m quand l'Action - (IBAction) ... est appelé en raison d'un bouton Cliquez)

J'espère que vous pouvez m'aider, Je suis nouveau à stackoverflow donc je ne sais pas si je devrais passé tout le code ici, je peux mais c'est peut-être plus facile à lire comme ceci

Répondre

6

Vous devriez lire le matériel conceptuel . Le système vous demande d'afficher -drawRect: lorsque le système le juge nécessaire. À cet égard, votre point de vue peut être demandé de se dessiner à tout moment. Par conséquent, vous devez penser à cela en termes de "tirer l'état actuel". Ce que vous devriez probablement faire (dans cette situation de base) est peut-être de donner à votre vue personnalisée une propriété booléenne "drawIt" et d'avoir votre action de bouton pour basculer ceci sur l'instance de vue. De cette façon if (self.drawIt == YES), vous pouvez appeler votre code rectangle-dessin. Vous devez toujours faire quelque chose pour "effacer" la vue lorsque -drawRect: est appelée (comme remplir les limites entières avec du blanc), puis dessiner seulement le conditionnel si la condition est remplie.

Exemple:

- (void)drawRect:(NSRect)aRect 
{ 
    // Clean up background (we ignore "aRect", drawing entire view at once) 
    [[NSColor whiteColor] set]; 
    NSRectFill([self bounds]); 

    // Do we want to draw our magic rect? 
    if ([self drawMagicRect]) 
    { 
    [[NSColor redColor] set]; 
    NSRectFill([self magicRect]); 
    } 
} 
+0

Merci - donc dans le - (IBAction) buttonAction ... {je dis: drawMagicRect = TRUE; donc il va recharger la vue et le rectangle sera affiché, dois-je prendre soin de la valeur par défaut drawMagicRects? – Samuel

+0

Vous allez devoir faire vos devoirs: Lisez la documentation sur les propriétés d'Objective-C 2.0. En ce qui concerne l'actualisation, la meilleure pratique consiste généralement à appeler [self setNeedsDisplay: YES] à partir de la méthode d'accesseur Setter de la propriété après qu'elle a été modifiée. Cela indiquera au système que la vue doit être redessinée. –

+0

okay je vais lire un peu mais j'ai eu l'idée de base maintenant merci ^^ – Samuel