2010-07-29 4 views
2

У меня есть UIView, у которого есть несколько кнопок, добавленных к нему в виде подзонов. В настоящее время у меня есть кнопки в drawRect :, которые я слышал, это плохая идея, потому что drawRect можно вызвать несколько раз. Я попытался переместить эти UIButton в initWithFrame, но они просто не нарисованы. Как мне это исправить?UIView drawRect vs initWithFrame

Я не использую конструктор интерфейса, поэтому нет файлов NIB. Вызывается initWithFrame. Я проверил, добавив NSLog (...), и мои NSMutableArrays были правильно инициализированы.

My initWitFrame: код в настоящее время очень мало. Это

- (id)initWithFrame:(CGRect)frame 
{ 
    if (self = [super initWithFrame:frame]) 
    { 
     results = [[NSMutableArray alloc] init]; 
     inputs = [[NSMutableArray alloc] init]; 
     format = [[NSDateFormatter alloc] init]; 
     [format setDateFormat:@"EEE, MMM dd, yyyy"]; 
     renc =[[RenameController alloc] init]; 
    } 
    return self; 
} 

Я пытался добавить TextLabel вроде следующего

#define BOX_WIDTH 155.0 
#define BOX_OFFSET 45.00 
#define ROW_HEIGHT 27 

- (id)initWithFrame:(CGRect)frame 
{ 
    if (self = [super initWithFrame:frame]) 
    { 
     results = [[NSMutableArray alloc] init]; 
     inputs = [[NSMutableArray alloc] init]; 
     format = [[NSDateFormatter alloc] init]; 
     [format setDateFormat:@"EEE, MMM dd, yyyy"]; 
     renc =[[RenameController alloc] init]; 

     double row=0.0; 
     [self makelabel:@"Start" at:CGRectMake(0, row, BOX_OFFSET, ROW_HEIGHT)]; 
    } 
    return self; 
} 

-(void) makelabel:(NSString *) str at:(CGRect) rect 
{ 
    UILabel *title = [[UILabel alloc] initWithFrame:rect]; 
    title.text = str; 
    title.textAlignment = UITextAlignmentLeft; 
    title.textColor = [UIColor blackColor]; 
    title.backgroundColor = [UIColor clearColor]; 
    title.font = [UIFont boldSystemFontOfSize:FONT_SIZE]; 
    [self addSubview:title]; 
    [title release]; 
} 
+1

ОК, то может вашу долю вашей initWithFrame: Код? Является initWithFrame: называется? – tonklon

+0

Добавлен код. Я не думаю, что это полезно, но –

+0

Этот код не отображает никаких кнопок, создаваемых или добавленных в представление. Не могли бы вы разместить код, в котором вы попытались добавить их в представление в -initWithFrame :? –

ответ

7

@tonklon - место сверху. Кроме того, обычный рисунок должен иметь свой собственный код инициализации в третьем способе, например -sharedInit, который вызывается после соответствующего super инициализатора:

- (id)sharedInit { 
    // do whatever, possibly releasing self on error and returning nil 
    return self; 
} 

- (id)initWithFrame: (CGRect)frame { 
    self = [super initWithFrame: frame]; 
    if (self) { 
     self = [self sharedInit]; 
    } 
    return self; 
} 

- (id)initWithCoder: (NSCoder *)aDecoder { 
    self = [super initWithDecoder: aDecoder]; 
    if (self) { 
     self = [self sharedInit]; 
    } 
    return self; 
} 
+0

+1 Это важно. – tonklon

2

небось вид загружается из файла СИБ? Просто используйте один и тот же код, чтобы добавить свои подвиды в initWithCoder:

UIView класс Артикул:

Если вы используете Interface Builder для разработки своего интерфейса, этот метод не вызывается, когда ваши просматривать объекты впоследствии загружен из файла nib. Объектов в бобах файла, восстанавливали, а затем инициализируется с использованием их initWithCoder: метод, который изменяет атрибуты зрения, чтобы сопоставить атрибуты, хранящиеся в файлового СИБА. Для получения подробной информации о том, как представления загружаются из файла nib , см. Руководство по программированию ресурсов.

+1

Извините, в этом доме нет конструктора интерфейса! –

Смежные вопросы