2009-06-17 11 views
0

J'ai une sous-classe UIView que je manipule beaucoup de graphiques sur la base de touches. Tous les appels [self setNeedsDisplay] semblent bien se passer. Cependant, j'ai utilisé un pointeur de variable d'instance pour ma même instance de sous-classe UIView, puis j'ai essayé de le manipuler puis d'appeler [UIViewSubClass setNeedsDisplay] d'une autre classe UIView, et DrawRect n'est jamais appelé. Existe-t-il des restrictions à l'endroit où vous pouvez appeler setNeedsDisplay?Appel de setNeedsDisplay sur un UIView d'une autre classe

(Cette méthode est appelée lorsqu'un bouton est cliqué sur une autre sous-classe UIView La méthode est appelée, mais pas drawRect.)

-(IBAction)loadGrid2; 
{ 
    tempSoundArray = musicGridView1.soundArray; 
    [musicGridView1.soundArray setButtonArrayToNull]; 
    [musicGridView1 setNeedsDisplay]; 
    musicGridView1.soundArray = tempSoundArray; 
    NSLog(@"loadGrid2 was called"); 
} 

Répondre

1

drawRect: ne sera appelé quand il est logique; c'est-à-dire que la vue doit être visible, à l'écran et sale. Est-ce que votre drawRect: jamais appelé? Il devrait être appelé lorsque la vue est également affichée à l'écran.

1

Pour ajouter à Ben: Cela signifie probablement que vous avez des problèmes ailleurs. Votre pointeur peut ne pas être nul ou autrement invalide ou la vue ne peut pas être correctement ajoutée à la hiérarchie.

Vous pouvez envisager de ne pas gérer ce comportement de type dans la vue et à la place dans le contrôleur de vue. Contrôler le comportement et enregistrer l'état de présentation dans le contrôleur de vue et ne pas sous-classer les classes d'affichage. Cela simplifiera votre code avec moins de "passage de pointeur". Cela facilitera également le débogage de ce type de problème.

Si vous pensez que votre contrôleur de vue est gonflé, envisagez de répartir les responsabilités entre plusieurs contrôleurs de vue.

Questions connexes