2012-03-07 4 views
1

У меня есть контроллер просмотра, который отображает группу эскизов, изначально это только что показало 12, но я хочу разрешить изменение этого, чтобы разрешить различное число, 9, 6, 4, 2.init ViewController загружает разные XIB на основе параметра, переданного в

Каждый из них будет иметь разную компоновку, поэтому я хотел бы загрузить другой XIB, но использовать тот же класс контроллера. Поэтому я надеялся, что смогу выполнить это, передав параметр, который позволит мне узнать, какой XIB загружать в init.

Вот мой INIT в настоящее время:

-(id) initWithPriceLevel: (NSNumber *) aPriceLevel withLabelTemplate:(NSString *) aLabelTemplate withPageSize: (int) aPageSize { 
    self = [self init]; 
    if (self) { 
     self.priceLevel = aPriceLevel; 
     self.labelTemplate = aLabelTemplate; 
     if ([aPriceLevel isEqualToNumber:[NSNumber numberWithInt:0]]) { 
      self.key = @"BasePrice"; 
     } else { 
      self.key = [NSString stringWithFormat: @"PriceLevel%@", aPriceLevel]; 
     } 

     queue = dispatch_queue_create("com.myapp.thumbnailimages", NULL); 
    } 
    return self; 
} 

Я предполагаю, что я мог бы использовать какой-то переключатель на aPageSize, которая позволит мне загрузить различные XIb-х.

+0

Почему вы не создаете объект с разным наконечником каждый раз? –

ответ

1

Это было довольно просто, я K eep вопрос отправлен в случае, если он помогает кому-либо еще. Я изменил мою инициализацию так:

-(id) initWithPriceLevel: (NSNumber *) aPriceLevel withLabelTemplate:(NSString *) aLabelTemplate withNibName:(NSString *) aNibName { 
    if ([aNibName isEqualToString:@""]) { 
     aNibName = @"PageCollectionViewController"; 
    } 
    self = [self initWithNibName:aNibName bundle:nil]; 
    if (self) { 
     self.priceLevel = aPriceLevel; 
     self.labelTemplate = aLabelTemplate; 
     if ([aPriceLevel isEqualToNumber:[NSNumber numberWithInt:0]]) { 
      self.key = @"BasePrice"; 
     } else { 
      self.key = [NSString stringWithFormat: @"PriceLevel%@", aPriceLevel]; 
     } 

     queue = dispatch_queue_create("com.myapp.thumbnailimages", NULL); 
    } 
    return self; 
} 

Я добавил параметр, чтобы передать имя СИБА, если это просто пустая строка я использую имя NIB по умолчанию. Это отлично работает и дает мне гибкость, которую я искал.

0

Вам не нужно создавать все в формате .xib с помощью межфазного построителя, вы можете создать часть представления с помощью построителя межфаз, а затем в viewDidLoad вы создадите остальную часть представлений динамически в зависимости от количества миниатюр

Другой вариант заключается в загрузке diffierent XIB в случаях Diferent:

MyClass *myClass = [[MyClass alloc] initWithNibName:@"my1xib" bundle:nil]; 

Или

MyClass *myClass = [[MyClass alloc] initWithNibName:@"my2xib" bundle:nil]; 
+0

Я понимаю это, но он не работает для моей текущей настройки – Slee

+0

Отредактировано другим ответом –

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