2010-05-04 78 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作为笔尖文件文件所有者的类型,并连接IB中的contentView插座。我将Interface Library中的常规UIView放置到向用户显示的全尺寸视图中,然后将其类名更改为PricingDataView。它都是构建的,但是在运行时,我的自定义视图应该不会呈现任何内容。

我在PricingDataView.initWithFrame中放置了断点,但它们没有命中,所以我知道我错过了一些会导致视图初始化的东西。我很好奇的是,在从nibs加载其他视图的过程中,所有的初始化都发生在我身上,而不是这个。为什么?

回答

10

您确定您的其他意见没有使用UIViewController?下面是来自documentationinitWithFrame:报价从UIView

如果您使用Interface Builder来设计 你的接口,这种方法不 调用时您的视图对象 随后从笔尖文件加载。在笔尖文件 对象是 重构,然后使用它们的initWithCoder初始化 :方法,其中 修改 视图的属性来匹配存储在 笔尖文件的属性。有关如何从笔尖 文件加载视图的详细信息 ,请参阅Resource Programming Guide

1

当您在运行时在Interface Builder中添加文件时,它会调用 -(id)initWithCoder:(NSCoder *)aDecoder而不是initWithFrame。

1

只是撤消您添加到UIView视图的类名称(PricingDataView)。在这种情况下,将调用initWithFrame:方法。

以前的awakeFromNib被循环调用。由于您的customViewView是通过Nib添加的,因为subView属于同一类型。

相关问题