2016-02-06 5 views
3

Мне нужно создать и загрузить UIViewController, прежде чем вставлять его в качестве подзаголовка в другой UIViewController.loadViewIfNeeded до iOS 9

В iOS 9 я мог бы сделать myController.loadViewIfNeeded(). Что является хорошим обходным решением для iOS 8?

Кажется, что myController.view.hidden = myController.view.hidden работает, но кажется опасным взломом.

+1

Причина, по которой этот маленький «взлом» работает, заключается в том, что диспетчеры представлений загружают свои представления при первом доступе (так что даже «print (vc.view)» будет загружать представление). _but_ существуют надлежащие механизмы управления дочерними контроллерами в случае, если вы реализуете [пользовательский контроллер представления контейнеров] (https://developer.apple.com/library/ios/featuredarticles/ViewControllerPGforiPhoneOS/ImplementingaContainerViewController.html#//apple_ref/doc/uid/TP40007457-CH11-SW12) – Alladinian

ответ

8

Существует множество способов заставить контроллер просмотра загрузить его представление. Фактически, наиболее распространенным способом (насколько мне известно) является доступ к свойству view контроллера вида.

_ = viewController.view 

Я бы не рассматривал это как взломать. Фактически, в документации Apple указано, что доступ к свойству представления, когда он равен nil, приводит к загрузке запрашиваемого вида. Это означает, что предлагаемое решение является безопасным и должно работать как можно раньше, даже в будущих версиях iOS. От Apple's documentation:

Вид, сохраненный в этом свойстве, представляет собой корневой вид иерархии представлений контроллера представления. Значение по умолчанию этого свойства равно nil.

Если вы обращаетесь к этому свойству и его значение в настоящее время равно нулю, контроллер вида автоматически вызывает метод loadView и возвращает результирующий вид.

+0

На самом деле вам не нужна конечная точка с запятой. – devxoul

+0

Удаленная точка с запятой @devxoul. Благодаря! –

Смежные вопросы