2014-02-17 185 views
0

我已經設置了一個筆尖文件,在一個較大的UIView元素中包含一些基本的UIView元素。兩個元素是UIImageView類的子類(用於向用戶顯示數據的度量單位)。無論如何,在我看來,我希望將這些儀表作爲自己的筆尖文件,因爲它們具有許多視覺元素,爲了理智,將儀表單獨放置在自己的筆尖文件中會很好。我還想爲儀表和其他基本元素在父級筆尖文件中設置一個控制器。我已經將父級筆尖中的子級別筆尖對象設置爲我的自定義類(如UIMeter)。我無法將子筆尖裝入父筆尖,當我重寫UIMeter的initWithCoder方法時,它會創建一個無限循環,因爲我試圖使用loadnibnamed進入子筆尖文件進行加載。我也嘗試從父控制器加載nib,但它從loadnibnamed加載子筆尖和筆尖。這可能會更有意義的代碼和圖像:在筆尖文件中加載一個筆尖文件

UIMeter代碼,並不真的確定,我甚至需要這個,因爲它會導致無限循環,但我希望視圖可以足夠聰明,以某種方式加載自己儘管在閱讀文檔時,在控制器中爲視圖執行此操作似乎更合適。

-(id)initWithCoder:(NSCoder *)aDecoder 
{ 
self = [super initWithCoder:aDecoder]; 
if(self) 
{ 
    self = [[[NSBundle mainBundle] loadNibNamed:@"PowerMeterView" owner:self options:nil] firstObject]; 
} 
return self; 

}

在父控制器我撥打了像這樣的觀點:

-(void)loadView 
{ 
if(![self isViewLoaded]) 
{ 
    GameMenuView *menuView = [GameMenuView new]; 
    menuView.userEnergy = [[[NSBundle mainBundle] loadNibNamed:@"PowerMeterView" owner:self options:nil] firstObject]; 
    menuView.userReactor = [[[NSBundle mainBundle] loadNibNamed:@"PowerMeterView" owner:self options:nil] firstObject]; 
    _gameMenuView = menuView; 
//--This places the child nib from the file on the view but it is not replacing the UIMeter in the parent nib 
    [menuView.userEnergy setFrame:CGRectMake(0, 0, 20, 20)]; 
    [menuView addSubview:menuView.userEnergy]; 
    [self setView:menuView]; 
} 

}

Child nib file PowerMeterView.xib Parent nib file, the red boxes are the two meter subclass placeholders

回答

0

打出來的循環,你可以檢查你的元素Ë試圖與循環還沒有裝載

例如初始化,如果你有所謂的「標籤」視圖

那麼你的initWithCoder看起來像這樣

-(id) initWithCoder:(NSCoder *)aDecoder{ 
    self = [super initWithCoder:aDecoder]; 
     if (self){ 
      if(!self.label){ 
       load the nib 

      } 
     return self; 

}