2010-05-04 75 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屬於同一類型。

相關問題