2010-05-04 4 views
3

Я создал настраиваемое представление, которое загружает его содержимое с кончиком пера, как это:пользовательский вид с пером, как подвид, чтобы нагружать

/* PricingDataView.h */ 

#import <UIKit/UIKIt.h> 

@interface PricingDataView : UIView { 
    UIView *contentView; 
} 
@property (nonatomic, retain) IBOutlet UIView *contentView; 
@end 

/* PricingDataView.m */ 

#import "PricingDataView.h" 

@implementation PricingDataView 
@synthesize contentView; 

- (id)initWithFrame:(CGRect)frame { 
    if ((self = [super initWithFrame:frame])) { 
    [[NSBundle mainBundle] loadNibNamed:@"PricingDataView" owner:self options:nil]; 
    [contentView setFrame:frame]; 
    [self addSubview:contentView]; 
    } 
    return self; 
} 

/* ... */ 

В файле бобов я поставил PricingDataView как тип владельца файла, и подключил выход contentView в IB. Я разместил регулярный UIView из библиотеки интерфейса на полноразмерный вид, показанный пользователю, а затем изменил его имя класса на PricingDataView. Все это строит, но во время выполнения ничего не отображается, когда предполагается, что мой пользовательский вид должен быть.

Я установил точки останова в PricingDataView.initWithFrame, но они не попали, поэтому я знаю, что мне не хватает чего-то, что приведет к инициализации представления. Мне интересно, что при загрузке моих других представлений из nibs вся инициализация происходит для меня, но не с этим. Зачем?

ответ

10

У вас есть другие мнения, которые не используют UIViewController? Вот цитата из documentation для initWithFrame: из UIView:

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

1

при добавлении файлов в Interface Builder во время выполнения он вызывает -(id)initWithCoder:(NSCoder *)aDecoder и не initWithFrame.

1

просто отмените название класса (PricingDataView), которое вы добавите к UIView. В этом случае будет вызван метод initWithFrame :.

ранее awakeFromNib был вызван в цикле. В качестве customView и View вы добавляете Nib, так как subView имеют один и тот же тип.