Первоначально это был комментарий в ветке Ратиньо, но он стал слишком большим.
Хотя мой собственный опыт совпадает со всем, что упомянуто здесь и выше, есть некоторые вещи, которые могут облегчить вашу боль или, по крайней мере, заставить вещи чувствовать себя немного менее взломанными.
Получите все ваши пользовательские классы UIView из общего класса, скажем, EmbeddableView. Оберните всю логику initWithCoder в этом базовом классе, используя идентификатор класса (или перегружаемый метод), чтобы определить NIB для инициализации. Это все еще хак, но вы хотя бы формализуете правила интерфейса и скрываете механизм.
Кроме того, вы можете еще больше улучшить интерфейс Interface Builder, используя классы «micro controller», которые соединяются с вашими пользовательскими представлениями для обработки их методов делегирования / действия и устранения разрыва с основным UIViewController через собственный протокол делегирования. Все это можно соединить вместе, используя соединители в Интерфейсном Разработчике.
Базовому UIViewController нужно только реализовать достаточно функциональности, чтобы соответствовать шаблону делегирования "микроконтроллера".
У вас уже есть детали для добавления пользовательских представлений путем изменения имени класса и обработки загрузки пера. «Микроконтроллеры» (если используются) могут быть просто производными NSObject классами , добавляемыми в NIB, как предлагается здесь .
Несмотря на то, что я проделал все эти шаги в единичных случаях, я никогда не проходил все это до такого рода формального решения, но при некотором планировании оно должно быть достаточно надежным и надежным.