2010-08-06 17 views
8

Ho una sottoclasse UIView personalizzata. In IB, ho specificato un UIView "segnaposto" e impostato la classe sul nome della mia classe. Il mio metodo override del metodo drawRect funziona e lo sfondo si colora correttamente, ma initWithFrame non si attiva. Perché?Sottoclasse UIView initWithFrame non viene chiamato?

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

puoi mostrare il codice dove hai creato la vista personalizzata? Stai chiamando: \t UIView * fred = [[allocazione UIView] initWithFrame: myFrame]; – joelm

risposta

-2

perché si inizializza questo punto di vista da un pennino che sembra, quindi esso utilizza il valore di default (del UIView) initWithnibName: invece di inizializzare usando initWithFrame:

+0

Quindi è impossibile sovrascrivere l'inizializzazione nella sottoclasse? Un'altra domanda. In IB, la vista è impostata su 50pt di altezza, ma è inizializzata con una cornice alta 42pt. –

+0

proverei a sovrascrivere init: anche a vedere se viene chiamato. Ho dimenticato che UIView non ha effettivamente initWithNibName. questo è un metodo in UIViewController –

52

cose caricati da un pennino sono Inited con -(id)initWithCoder:(NSCoder*)coder

+13

Vorrei che le persone tornassero e contrassegnassero le risposte come corrette. –

Problemi correlati