2014-02-17 5 views
0

Я установил файл nib, чтобы включить некоторые основные элементы UIView в большой элемент UIView. Два элемента - это подклассы класса UIImageView (метры для отображения данных пользователю). Во всяком случае, на мой взгляд, я бы хотел, чтобы эти счетчики были их собственным файлом nib, так как у них было несколько визуальных элементов, и для здравого смысла было бы удобно разместить счетчик отдельно в своем собственном файле nib. Я также хотел бы иметь один контроллер для счетчика и другие базовые элементы в родительском файле nib. Я установил дочерние измерительные приборы в родительский ниб для моего пользовательского класса (например, UIMeter). У меня возникли проблемы с загрузкой дочернего элемента в родительский 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]; 
} 

}

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; 

} 
Смежные вопросы