Я делаю это в своем приложении, Litho Graph. Если при выходе вы находитесь на странице, то при следующем запуске она вернется на эту страницу. Это тоже довольно просто: в моей реализации -view контроллера -viewDidLoad я проверяю ключ последней просмотренной страницы по умолчанию. Если ничего нет, я продолжаю как обычно (и показываю список всех страниц). Если что-то есть, я открываю эту страницу (помещая новый контроллер представления в стек контроллера навигации).
Фактическая загрузка контроллеров представления очень проста: я просто создаю их экземпляр. Каждый из моих классов контроллеров представления имеет переопределенный параметр -init для вызова -initWithNibName: bundle: on super, поэтому для создания экземпляра контроллера представления достаточно вызвать + alloc и -init для загрузки его из соответствующего файла .xib. Затем, как описано выше, я помещаю его в стек контроллера навигации:
[self.navigationController pushViewController: controller animated: YES];
Конечно, вы можете сделать это на столько слоев, сколько вам нужно, но имейте в виду, что вы можете выдвигать контроллеры представления без анимации, если будет несколько переходов; пользователю было бы непродуктивно ждать нескольких анимаций (: