Я думаю, что лучшее решение - «не делай этого». Вместо того, чтобы надеяться, что вы сможете продублировать все поведение UIViewController, не отклоняясь при использовании вызовов частного API, почему бы не создать объекты-контроллеры не-UIViewController для управления вашими подвидами? «Контроллер» не обязательно является UIViewController
.
Как минимум вам нужно переопределить или смешать в заменяющих геттерах для parentViewController
, splitViewController
, navigationController
, tabBarController
и interfaceOrientation
(и, вероятно, также modalViewController
). Для каждого свойства вам необходимо убедиться, что любой частный установщик, вызываемый UIKit, по-прежнему работает должным образом, и любые изменения этих значений, сделанные путем непосредственного изменения иваров UIViewController, также правильно отражаются в ваших реализациях.
Вам также понадобится выяснить, как UIKit определяет, какой UIViewController в данный момент активен и должен получать методы жизненного цикла контроллера представления, потому что вы должны убедиться, что они отправляются вашему контроллеру контейнера, а не только одному из них. дети.
Вам также придется надеяться, что вы только что создали ситуацию, которая не поддерживается ни одним из классов контроллеров представления Apple. Например, кто-нибудь из них сломается, если у них есть parentViewController
, но их navigationController
, tabBarController
и splitViewController
равны нулю?
Наконец, вам нужно следить за любыми изменениями в этих деталях частной реализации с каждым выпуском iOS.