2009-07-01 6 views
0

Welche Art von Objective-C-Laufzeitmagie muss ich verwenden, um sie zu einer Eigenschaft für ein Objekt zu machen, die immer auf einen Wert gesetzt wird, der nicht dem normalen Standard entspricht. Zum Beispiel ist UIImageViews userInteractionEnabled immer falsch, aber ich möchte meiner eigenen UIImageview-Unterklasse immer userInteractionEnabled auf true setzen. Ist dasselbe möglich, ohne UIImageView zu untergliedern?Wie legen Sie eine Eigenschaft einer UIKit-Klasse oder -Unterklasse für alle zukünftigen Instantianer fest?

Antwort

0

Erstellen Sie eine Kategorie mit einer init-Methode und/oder einem Convenience-Konstruktor, der die Eigenschaft für Sie festlegt. Bei der Festlegung von Werten im Konstruktor werden so ziemlich alle "Objektstandards" in Objective-C behandelt, und glücklicherweise können Sie mit Kategorien eine beliebige Funktionalität zu einer Klasse hinzufügen, solange keine zusätzlichen Instanzvariablen erforderlich sind.

1

Sie könnten eine neue Kategorie für UIImageView und eine neue initializer hinzu:

// 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 

Sie müssen UIImageView(CustomInitialization).h im Code enthalten, und rufen Sie dann Ihre initializer jedes Mal, wenn Sie die Standardeigenschaften festlegen möchten:

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

+0

Sollte ich dies stattdessen innerhalb der Image-Eigenschaft tun? Da UIImageView ohne Bildsatz erstellt werden kann (z. B. in Interface Builder ohne Bildsatz erstellt) – Boon

Verwandte Themen