Подвиды не отображаются в классе UIView

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

Я создал класс (myUIView), который является подклассом UIView, а затем изменил класс файла пера в 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];
}

person Craig    schedule 15.04.2009    source источник


Ответы (2)


да, просто реализуйте initWithCoder.

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

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

person Pizzaiola Gorgonzola    schedule 13.11.2012

попробуйте реализовать initWithCoder: иногда у меня были проблемы с IB и initWithFrame:

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

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