首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在nib文件中加载nib文件

在nib文件中加载nib文件
EN

Stack Overflow用户
提问于 2014-02-18 04:17:08
回答 1查看 114关注 0票数 0

我设置了一个nib文件,在一个更大的UIView元素中包含一些基本的UIView元素。有两个元素是UIImageView类的子类(用于向用户显示数据的仪表)。无论如何,在我看来,我希望这些仪表是它们自己的nib文件,因为它们有许多视觉元素,为了理智起见,最好将仪表单独放在它自己的nib文件中。我也希望有一个控制器的仪表和其他的基本元素在父nib文件。我已经将父指针中的子仪表指针对象设置为我的自定义类(比如UIMeter)。我在加载子nib到父nib时遇到了问题,当我重写UIMeter initWithCoder方法时,它会创建一个无限循环,因为我试图使用loadnibnamed来访问子nib文件进行加载。我也尝试过从父控制器加载nib,但它从loadnibnamed加载了子nib和nib。这可能对代码和图像更有意义:

UIMeter代码,我甚至不确定我是否需要它,因为它会导致无限循环,但我希望视图能够足够智能,以某种方式自动加载,尽管在读取文档时,在视图的控制器中这样做似乎更合适。

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

}

在父控制器中,我像这样拨打视图:

代码语言:javascript
复制
-(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];
}

}

EN

回答 1

Stack Overflow用户

发布于 2014-05-05 17:28:30

要中断循环,可以检查试图用循环初始化的元素是否尚未加载

例如,如果您有一个名为"label“的视图

那么你的initWithCoder应该是这样的

代码语言:javascript
复制
-(id) initWithCoder:(NSCoder *)aDecoder{
     self = [super initWithCoder:aDecoder];
       if (self){
            if(!self.label){
               load the nib

            }
      return self;

}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21838496

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档