Самый простой подход - просто информировать все ваши контроллеры представления об этом дополнительном представлении (сделать представление доступным через одноэлементный PinnedViewController или любой другой). Во время каждого контроллера -viewWillAppear
, просто сделайте это:
[self addSubview:[[PinnedViewController sharedController] view]];
Это переместит представление к тому, кто в данный момент активен (создание представления, которое ваше подпредставление автоматически удаляет из вашей старой иерархии).
Если это громоздко или иначе неработоспособно, есть два других варианта. Во-первых, вы можете создать подкласс UITabViewController
(я полагаю, это то, что вы используете здесь из своего вопроса), и добавить ваше дополнительное представление (изменив представление содержимого, чтобы освободить место). Это без документов и без поддержки, так что будьте внимательны. Но это не невероятно сложно, если вы не делаете слишком много других хитростей.
Другим хитрым решением является создание второго UIWindow
, который вы перемещаете над основным UIWindow
(или изменяете размер основного UIWindow
, чтобы освободить место для него). Это только частично документировано и также не поддерживается. Но этот подход может сработать, если вы пытаетесь поместить дополнительный вид, например, под панель вкладок.
Но если ваша система достаточно проста, я рекомендую просто разрешить всем контроллерам представлений управлять закрепленным представлением вручную. Таким образом вы сэкономите много кода, и вам не придется полагаться на какие-либо недокументированные внутренние иерархии представлений.