2009-04-15 7 views
0

Ich versuche, einige Bilder in Code mit addSubview zu legen, und sie werden nicht angezeigt.Subviews, die nicht in UIView-Klasse angezeigt werden

Ich erstellte eine Klasse (myUIView), die Unterklassen UIView, und änderte dann die Klasse der NIB-Datei in IB zu myUIView.

Dann gebe ich den folgenden Code ein, bekomme aber immer noch einen leeren grauen Bildschirm.

- (id)initWithFrame:(CGRect)frame { 
    if (self = [super initWithFrame:frame]) { 
     // Initialization code 
     [self setupSubviews]; 
    } 
    return self; 
} 

- (void)setupSubviews 
{ 
    self.backgroundColor = [UIColor blackColor]; 

    UIImageView *black = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"black.png"]]; 
    black.center = self.center; 
    black.opaque = YES; 

    [self addSubview:black]; 

    [black release]; 
} 

Antwort

0

Versuch der Umsetzung initWithCoder: manchmal habe ich habe Probleme mit IB und initWithFrame:

oder zumindest einen Logging-Anruf hinzufügen, um zu sehen, ob Ihre Methode init

+0

Das hat funktioniert .... Irgendeine Idee warum? – Craig

+1

Es ist einfach so, wie IB Sachen macht, ich weiß nicht warum. Eine möglicherweise bessere Alternative ist die Verwendung von - (void) watchFromNib, die aufgerufen wird, nachdem alle Objekte aus der Nib geladen wurden, so dass Sie auf IBOutlets zugreifen können und wissen, dass sie initialisiert wurden. – cobbal

2

ja ausgeführt wird, nur initWithCoder implementieren.

initWithFrame wird aufgerufen, wenn eine UIView dynamisch aus Code erstellt wird. eine Ansicht, die aus einer NIB-Datei geladen wird immer instanziiert mit InitWithCoder, der Coder kümmert sich um das Lesen der Einstellungen aus der NIB-Datei

Ich nahm die Angewohnheit, die Initialisierung in einer separaten Methode, Implementieren von beiden InitWithCode und initWithFrame (und meine eigenen Initialisierungsmethoden, wenn erforderlich)