2010-08-06 15 views
8

Mam niestandardową podklasę UIView. W IB podałem UIView "placeholder" i ustawiłem klasę na moją nazwę klasy. Moje nadpisanie metody drawRect działa, a tło jest poprawnie kolorowane, ale initWithFrame nie uruchamia się. Czemu?Podklasa UIView initWithFrame nie jest wywoływana?

- (id)initWithFrame:(CGRect)frame { 
    NSLog(@"initWithFrame"); 
    if ((self = [super initWithFrame:frame])) { 
     noteTextFont = [[UIFont boldSystemFontOfSize:12] retain]; 
    } 
    return self; 
} 

- (void)drawRect:(CGRect)rect { 
    [super drawRect:rect]; 
    CGContextRef context = UIGraphicsGetCurrentContext(); 

    UIColor *backgroundColor = [UIColor blackColor]; 
    [backgroundColor set]; 
    CGContextFillRect(context, rect); 

    UIColor *labelColor = [UIColor lightGrayColor]; 
    [labelColor set]; 
    [notificationLabel drawInRect:CGRectMake(44, 18, rect.size.width-20, rect.size.height) withFont:noteTextFont lineBreakMode:UILineBreakModeTailTruncation]; 

    [self setNeedsLayout]; 
} 
+0

Czy możesz wyświetlić kod, w którym tworzysz niestandardowy widok? Czy dzwonisz: \t UIView * fred = [[przydziela UIView] initWithFrame: myFrame]; – joelm

Odpowiedz

-2

ponieważ jesteś inicjowanie ten widok z nib to wygląda, więc korzysta z domyślnego (UIView'S) initWithNibName: zamiast inicjowania za pomocą initWithFrame:

+0

Czy zatem niemożliwe jest zastąpienie inicjowania w podklasie? Inne pytanie. W IB, widok ma wysokość 50 punktów, ale jest inicjowany przy ramie, która ma 42 cale wysokości. –

+0

Chciałbym spróbować przesłonić init: jak również sprawdzić, czy zostanie wywołana. Zapomniałem, że UIView w rzeczywistości nie ma initWithNibName. to jest metoda w UIViewController –

52

Rzeczy ładowane z nib są inited z -(id)initWithCoder:(NSCoder*)coder

+13

Chciałbym, aby ludzie wracali i zaznaczali odpowiedzi jako poprawne. –

Powiązane problemy