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


发布于 2014-05-05 17:28:30
要中断循环,可以检查试图用循环初始化的元素是否尚未加载
例如,如果您有一个名为"label“的视图
那么你的initWithCoder应该是这样的
-(id) initWithCoder:(NSCoder *)aDecoder{
self = [super initWithCoder:aDecoder];
if (self){
if(!self.label){
load the nib
}
return self;
}https://stackoverflow.com/questions/21838496
复制相似问题