【发布时间】:2015-09-01 00:22:08
【问题描述】:
我开发了很多 iOS 应用,并在页面管理等方面构建了相当复杂的用户流程。
在许多情况下,UINavigationController 堆栈非常适合推送可能的页面树,但缺乏我所寻找的很多可定制性。
当需要可定制性时,我最终会使用大量的 ViewController 容器。它看起来像这样:
//ParentViewController.m
@interface ParentViewController ()
@property (nonatomic, strong) ChildViewController *childViewController;
@end
@implemenation ParentViewController
- (void)viewDidLoad {
[super viewDidLoad];
self.childViewController = [[ChildViewController alloc]init];
[self addChildViewController:self.childViewController];
[self.view addSubview:self.childViewController.view];
[self.childViewController didMoveToParentViewController:self];
}
当然,这是一个超级简单的例子,它比子类 UIViews 作为 VC 的主视图和更多的逻辑要复杂很多倍,但我倾向于这样做,有时甚至嵌套 5 到 10 次不同的风投。
所以我的问题是:在内存和实用性方面,做 VC Containment 是否有任何缺点(当然,除了手动处理堆栈的额外工作,例如“返回”按钮)?
【问题讨论】:
-
您的方法看起来效率不高。你能告诉你在 UINavigationController 中你想要做什么以及你需要什么类型的自定义吗?
-
例如,我有一些应用程序需要将某些视图从一个视图控制器动画化到另一个(在中间更改超级视图,多次使用 UIWindow 作为超级视图)。 UINavigation 堆栈使这非常困难。以什么方式效率低下?代码量?还是记忆明智?
-
@AlexKoren 我认为与您的结构相比,使用 UINavigationController 中的 UIWindow 动画视图的难度不会小。与其问你当前方法的缺点,不如在另一个问题中告诉我你想克服的问题。我可以提供帮助,我相信一定有更好的方法:)
-
没有任何问题!我喜欢我的应用程序的发布方式和它们的结构方式。我只是想知道为什么更多的人不像我那样使用 View Controller 遏制。也许有我不知道的管理问题。
-
你不能保留导航堆栈,而是使用自定义过渡吗?
标签: ios objective-c iphone uiviewcontroller