2014-02-17 139 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; 

}