В моих приложениях у меня много экземпляров одного контроллера представления, который затем использует разные или несколько представлений для отображения пользовательского интерфейса. Вы можете взять представление и все его подпредставления и добавить его в контроллер представления, используя addSubView, и удалить это представление и все его подпредставления, используя removeFromSuperview. Это хорошо работает, если представление отображает только информацию и имеет подклассы для обработки своих собственных отличий от других представлений, которые должен обрабатывать контроллер представления. В вашем случае представление аналоговых часов должно отображаться в одном направлении, а представление цифровых часов - в другом. Контроллер просто должен сказать каждому представлению, какое время, и представление обрабатывает перевод в визуальные данные. Если ваше представление принимает ввод в виде пользователя, который перетаскивает аналоговые стрелки для установки будильника, то подклассу представления необходимо прочитать этот вход, а затем преобразовать в время будильника и передать его обратно контроллеру представления. Контроллеру не нужно знать, с каким типом часов взаимодействует пользователь, а видит только время будильника, которое необходимо добавить в свою очередь будильника.
Однако, когда у меня есть представления, которые используют очень разные пользовательские интерфейсы или для разных целей, я обычно предпочитаю иметь один контроллер представления на набор представлений. По сути, я пытаюсь использовать мои представления в качестве дисплея, а мои viewControllers в качестве менеджера данных, связанных с этим представлением (и любые другие представления, которые могут быть поддержаны этими же данными).
Например, в моей игре есть один контроллер вида для игры, другой для таблицы рекордов и еще один для настроек.