2009-07-01 5 views
0

Quel type de magie d'exécution Objective-C dois-je utiliser pour que la propriété d'un objet soit toujours définie sur une valeur par défaut? Par exemple, userInteractionEnabled de UIImageView est toujours faux, mais je souhaite que ma propre sous-classe UIImageview ait toujours la valeur true pour userInteractionEnabled. La même chose est-elle réalisable sans sous-classe UIImageView?Comment définir une propriété d'une classe ou sous-classe UIKit pour tous les futurs instantians?

Répondre

0

Créez une catégorie avec une méthode init et/ou un constructeur de commodité qui définit la propriété pour vous. La définition des valeurs dans le constructeur est la façon dont toutes les «valeurs par défaut» sont gérées dans Objective-C, et heureusement, les catégories vous permettent d'ajouter n'importe quelle fonctionnalité à une classe tant qu'elle n'a pas besoin de variables d'instance supplémentaires.

1

Vous pouvez créer une nouvelle catégorie pour UIImageView et ajouter une nouvelle initialiseur:

// UIImageView(CustomInitialization).h 
@interface UIImageView (CustomInitialization) 

- (id)customInitWithImage:(UIImage *)image; 

@end 


// UIImageView(CustomInitialization).m 
#import "UIImageView(CustomInitialization).h" 

@implementation UIImageView (CustomInitialization) 

- (id)customInitWithImage:(UIImage *)image 
{ 
    if (self = [self initWithImage:image]) 
    { 
     self.userInteractionEnabled = YES; 
    } 
} 

@end 

Vous devrez inclure UIImageView(CustomInitialization).h dans votre code, puis appelez votre initialiseur chaque fois que vous voulez les propriétés par défaut définies:

UIImageView * iview = [[UIImageView alloc] customInitWithImage:[UIImage imageNamed:@"pic.png"]];

+0

Est-ce que je devrais faire cela à l'intérieur de la propriété d'image à la place? Depuis UIImageView peut être créé sans image définie (par exemple créé dans Interface Builder sans jeu d'images) – Boon

Questions connexes