2009-04-15 3 views
0

Я пытаюсь выложить некоторые изображения в коде с помощью addSubview, и они не отображаются.Subviews не отображаются в классе UIView

Я создал класс (myUIView), который подклассы UIView, а затем изменил класс файла nib в IB, чтобы быть myUIView.

Затем я ввел следующий код, но все равно получаю пустой серый экран.

- (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]; 
} 

ответ

0

попытка реализации initWithCoder: иногда я имел проблемы с IB и initWithFrame:

или, по крайней мере, добавить протоколирования вызовов, чтобы увидеть, если ваш метод инициализации выполняется

+0

Это сработало .... Любая идея почему? – Craig

+1

Это как раз то, как IB делает вещи, я не знаю, почему на самом деле. Возможно, лучшей альтернативой является использование - (void) awakeFromNib, который вызывается после загрузки всех объектов из nib, поэтому вы можете получить доступ к IBOutlets и знать, что они были инициализированы. – cobbal

2

да, просто реализовать initWithCoder.

initWithFrame вызывается, когда UIView создается динамически, начиная с кода. представление, загружаемое из .nib-файла, всегда создается с использованием initWithCoder, кодер позаботится о чтении настроек из файла .nib.

Я привык делать инициализацию отдельным методом, реализуя как initWithCode и initWithFrame (и мои собственные методы инициализации, когда это необходимо)

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