带有NIB文件的iOS UIView子类不显示IB中设计的UI

时间:2011-11-14 21:35:42

标签: ios uiview ios4 interface-builder

我有一个继承自UIView的类,这个类有我在IB中放置的一些控件。

然后,在我的主视图控制器的NIB文件中,我放置了一个视图,并将类更改为我的子类,并为子类创建了一个插座。但是,当我运行我的应用程序时,应用程序不显示我放在子类上的UI,它只是空白。

我在子类中获取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 个答案:

答案 0 :(得分:1)

要显示界面,您需要从父视图控制器显式实例化AnalyticsDetailView。

因此,在某些地方,例如viewDidLoad:viewWillAppear:方法,您将添加一行说明:

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