Если вы определяете пользовательские подклассы UIView, вы можете использовать для них столько логики, сколько имеет смысл хранить для них локально, предоставлять им протоколы делегатов для передачи чего-либо еще и, пока вы представляете делегат как IBOutlet, вы можете подключить свой контроллер представления в качестве соответствующего делегата непосредственно в Интерфейсном Разработчике или в конструкторе пользовательского интерфейса Xcode 4. Я лично думаю, что это было бы наиболее естественным путем, так как он объединяет любую логику, специфичную для представления, непосредственно в представлении. и позволяет вам выполнить подключение там, где вы обычно делаете подключение.
С точки зрения общего дизайна, такая схема соответствует модели модель-представление-контроллер, если ваши представления выполняют только логику, связанную с видом. Так, например, если у вас был настраиваемый прямоугольный вид, в котором можно провести пальцем в любом месте, чтобы изменить положение булавки, а 2-е положение булавки влияет на некоторые другие настройки системы, вы бы правильно уловили жест в представлении. , переставьте штырь, а затем отправьте обновления на его позиции делегату, который будет выполнять роль контроллера, и передадите значение в любые другие виды, на которые влияют, и на модель.
Комментируя предложенные решения напрямую:
(1) это сконцентрирует всю логику в одном контроллере; Правильно ли это с точки зрения разработки, зависит от того, в какой степени вам придется запрашивать ваши пользовательские представления (в том смысле, что вы не хотите, чтобы их обрабатывали в основном как данные, которые должны знать внешние действующие лица). манипулировать) и степень, в которой вы хотите повторно использовать логику.
(2) Я не уверен, что полностью понимаю предложение - для чего определен getViewController и как он знает, как на него реагировать? Если это сами UIViews и контроллер представления должен сначала идентифицировать себя, то я бы предложил просто принять шаблон делегата оптом, а не специализироваться на представлениях и контроллерах представления, например как вы можете захотеть создать составные представления, которые связывают логику из нескольких подпредставлений.
(3) как правило, такие вещи, которые нужно передать init, - это те, которые класс должен знать, чтобы иметь возможность инициализировать; вероятно, было бы лучше использовать обычное свойство для установки контроллера после факта. Или сделайте его IBOutlet и подключите так, чтобы это происходило автоматически через NIB.