iam*_*4de 9 iphone load subview uiview
假设我从一个笔尖加载了一个视图控制器,并决定对场景后面的一个子视图做一些事情.在稍后的时刻,我会显示这个视图控制器的视图.
viewController = [[MyViewController alloc] initWithNibName:@"MyViewController" bundle:nil];
[viewController.someSubview doSomething];
//later on
[mainView addSubview:viewController.view];
Run Code Online (Sandbox Code Playgroud)
问题是,在视图出现之前似乎没有加载someSubview对象,因此不调用doSomething方法.到目前为止,我的解决方法是致电:
[mainView addSubview:viewController.view];
[viewController.view removeFromSuperview];
Run Code Online (Sandbox Code Playgroud)
首先初始化viewcontroller的子视图.有没有更优雅的方式(如loadSubviews方法或其他东西)为此任务?
Mik*_*ler 23
首先,我会尝试简单地访问该属性:
[viewController view];
Run Code Online (Sandbox Code Playgroud)
这将强制视图的延迟加载(以及子视图和出口等),这对您来说已经足够了.默认情况下,查看控制器在您访问它之前不会加载它们的视图,因此这可能是您看到延迟的原因.
当您尝试访问outlet属性时,强制执行此类加载通常是解决方案,但它实际上尚未绑定,就像someSubview您的情况一样.
您还可以通过添加视图但隐藏它来改进一些事情:
viewController.view.hidden = YES;
[mainView addSubview:viewController.view];
Run Code Online (Sandbox Code Playgroud)
然后,而不是addSubview在你想要显示它时调用,只需:
viewController.view.hidden = NO;
Run Code Online (Sandbox Code Playgroud)
我在使用UIViewAnimationTransitionFlipFromRight等转换的视图中制作动画时使用了这种方法.即使强迫视图的延迟加载仍然存在明显的滞后,所以我已经使用它来改善性能.
| 归档时间: |
|
| 查看次数: |
11146 次 |
| 最近记录: |