Подкласс iOS UIView с файлом NIB не отображает пользовательский интерфейс, разработанный в IB - PullRequest
1 голос
/ 15 ноября 2011

У меня есть класс, который наследует от UIView, и у этого класса есть некоторые элементы управления, которые я поместил в него в IB.

Затем в файле NIB для моего контроллера основного представления я поместил представление, изменил класс на мой подкласс и создал выход для подкласса. Однако, когда я запускаю свое приложение, оно не отображает пользовательский интерфейс, который я поместил в подкласс, оно просто пустое.

Я получаю сообщения initWithCoder и awakeFromNib в подклассе, вот как выглядит файл .m подкласса в основном:

#import "AnalyticsDetailView.h"

@implementation AnalyticsDetailView

- (id)initWithCoder:(NSCoder *)aDecoder
{
    self = [super initWithCoder:aDecoder];
    return self;
}

- (void)awakeFromNib
{
    [super awakeFromNib];
}

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self)
    {
        NSArray *v = [[NSBundle mainBundle] loadNibNamed:@"AnalyticsDetailView" owner:self options:nil];
        [self addSubview:[v objectAtIndex:0]];
    }

    return self;
}

- (void)dealloc 
{
    [super dealloc];
}

@end

Я не уверен, правильно ли задан initWithFrame, но поскольку этот метод не запускается, я подозреваю, что на данном этапе это не имеет значения. Если я добавлю точку останова в свое приложение после того, как увидел срабатывание методов подкласса, я смогу посмотреть на подкласс розетки, и кадр будет таким же, как в IB.

У кого-нибудь есть какие-либо предложения (отсутствующий код, плохие соединения IB и т. Д.) О том, что искать, что я пропустил или делаю неправильно? Благодаря.

1 Ответ

1 голос
/ 15 ноября 2011

Чтобы ваш интерфейс появился, вам нужно явно создать экземпляр AnalyticsDetailView из вашего родительского контроллера представления.

Таким образом, где-то, как методы viewDidLoad: или viewWillAppear:, вы добавите строку, которая говорит:

AnalyticsDetailView * newView = [[AnalyticsDetailView alloc] initWithFrame: CGRectMake(x,y,height,width)]; 
[parentView addSubview: newView];
[newView release]; // subview retains for us
...