Сделайте представление (инициализированный от initWithNibName), загружают все его подпредставление

При принятии я загружаю контроллер представления из пера и решаю сделать что-то с одним из его подпредставления позади сцены. В более поздний момент вовремя, я показал бы представление этого контроллера представления.

viewController = [[MyViewController alloc] initWithNibName:@"MyViewController" bundle:nil]; 
[viewController.someSubview doSomething];

//later on 
[mainView addSubview:viewController.view];

Проблема состоит в том, что, объект someSubview, кажется, не загружается, пока представление не появляется, таким образом, метод doSomething не называют. До сих пор мое обходное решение должно звонить:

[mainView addSubview:viewController.view];
[viewController.view removeFromSuperview];

инициализировать подпредставления viewcontroller сначала. Есть ли еще изящный путь (как loadSubviews метод или что-то) для этой задачи?

9
задан iamj4de 20 December 2009 в 11:08
поделиться

1 ответ

Прежде всего, я бы попробовал просто получить доступ к свойству:

[viewController view];

Это заставит лениво загрузить вид (и, таким образом, вложенные просмотры, выходы и т.д.), и этого может быть достаточно для вас. Контроллеры просмотра по умолчанию не будут загружать свой вид, пока вы не получите к нему доступ, так что, возможно, именно поэтому вы видите задержку.

Принудительная загрузка, как правило, является решением, когда вы пытаетесь получить доступ к свойству outlet, но на самом деле оно еще не было привязано, как someSubview в вашем случае.

Вы также можете немного улучшить ситуацию, добавив вид, но сделав его скрытым:

viewController.view.hidden = YES;
[mainView addSubview:viewController.view];

Затем вместо вызова addSubview, когда вы хотите его показать, просто сделайте:

viewController.view.hidden = NO;

Я использовал этот метод при анимации видов, используя UIViewAnimationTransitionFlipFromRight и т.д. переходы. Даже при вынужденной ленивой загрузке вида все равно есть заметный лаг, поэтому я использовал этот метод для некоторого улучшения производительности.

23
ответ дан 4 December 2019 в 09:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: