Comment remplacer le trait de la collection initiale UIViewController? (avec Storyboard)

J'ai une application ciblée iOS8 et initiale-vue-contrôleur est UISplitViewController. J'utilise storyboard, de sorte qu'il gentiment instancier tout pour moi.

À cause de mon design que j'ai besoin SplitViewController à montrer à la fois maître et des vues de détail en mode portrait, sur iPhone. Donc, je suis à la recherche d'un moyen de remplacer le trait de collection pour cette UISplitViewController.

J'ai trouvé que je peux utiliser

 override func viewWillTransitionToSize(size: CGSize, withTransitionCoordinator coordinator: UIViewControllerTransitionCoordinator!) { ... }

mais, malheureusement, il ya seulement des méthodes pour remplacer enfant contrôleurs de traits collections:

setOverrideTraitCollection(collection: UITraitCollection!, forChildViewController childViewController: UIViewController!)

et je ne peux pas le faire pour soi dans ma UISplitViewController sous-classe.

J'ai vérifié un exemple d'application Adaptative Photos d'Apple. Et dans cette application, l'auteur utilise spécial TraitOverrideViewController en tant que root et un peu de magie dans son viewController setter pour faire tout cela fonctionne.

Il semble horrible pour moi. Est qu'il y a moyen de contourner pour remplacer les traits? Ou Si il n'y a pas, comment puis-je gérer à utiliser le même hack avec storyboard? En d'autres termes, la façon d'injecter quelques viewController comme racine uniquement pour gérer les traits de mon UISplitViewController avec storyboard?

Pourquoi faut-il regarder horrible? AAPLTraitOverrideViewController.m est à peine plus de 20 lignes de code. Il vous faudra peut-être 10 minutes pour les transformer en rapide et puis vous n'avez pas à regarder à nouveau.
voir mise à jour. Et non, je ne crois pas que ce genre de code sera libre de les maintenir. Enfin, maintenant j'ai besoin d'expliquer mes collèges quel est-il et pourquoi nous avons besoin d'un. Je ne peux pas raisonner sur chaque ligne, ce qui me fait me sentir mal. Pourquoi nous avons besoin de didMoveToParentViewController? Ou pourquoi nous avons besoin de shouldAutomaticallyForwardRotationmethods si c'est déconseillé?
et exemple d'application n'a pas vérifié les caractéristiques de la charge, de sorte qu'il sera en mauvais état, si vous le lancez en mode portrait... mon code ci-dessus hériter de cette question. Mettra à jour.

OriginalL'auteur Ilya Belikin | 2014-08-25