Я бы выбрал второй вариант, который вы упомянули, создав подпредставления в IB и поменяв их местами в главном представлении. Это было бы хорошей возможностью использовать UIViewController
, без подкласса: в вашей первоначальной настройке создайте контроллер, используя -initWithNibName:bundle:
(где первый параметр - это имя NIB, содержащего отдельное подпредставление, а второй параметр - nil
) и добавьте его view
как подпредставление вашего основного представления по мере необходимости. Это поможет сохранить низкую долю памяти: поведение по умолчанию UIViewController
при получении предупреждения о памяти заключается в освобождении его представления, если у него нет суперпредставления. Пока вы удаляете скрытые представления из иерархии представлений, вы можете хранить контроллеры в памяти и не беспокоиться об их освобождении.
(отредактировано в ответ на комментарий:)
Вам не нужно создавать подкласс UIViewController
, но вам нужны отдельные XIB для каждого представления. Вам также не нужно ничего добавлять к содержащему представлению в IB.
Переменные экземпляра в интерфейсе любого класса обрабатывают все это:
UIViewController *controllerOne;
UIViewController *controllerTwo;
UIViewController *currentController;
IBOutlet UIView *theContainerView;
В вашей настройке (-applicationDidFinishLaunching:
или что-то еще)
controllerOne = [[UIViewController alloc] initWithNibName:@"MyFirstView" bundle:nil];
controllerTwo = [[UIViewController alloc] initWithNibName:@"MySecondView" bundle:nil];
Чтобы переключиться на контроллер:
- (void)switchToController:(UIViewController *)newCtl
{
if(newCtl == currentController)
return;
if([currentController isViewLoaded])
[currentController.view removeFromSuperview];
if(newCtl != nil)
[theContainerView addSubview:newCtl.view];
currentController = newCtl;
}
Тогда просто позвоните, например, с
[self switchToController:controllerOne];