没有 modal、tabbar 和 navigationcontroller 的 UIViewController 工作流管理?

Posted

技术标签:

【中文标题】没有 modal、tabbar 和 navigationcontroller 的 UIViewController 工作流管理?【英文标题】:UIViewController workflow management without modal, tabbar and navigationcontroller? 【发布时间】:2011-08-05 10:09:40 【问题描述】:

你好 *** 研究员!

请考虑 ios 中的 UI 工作流程: 一个主视图控制器和其他几个从那里分支出来的视图控制器:

主视图控制器

+-viewcontroller 1

+-viewcontroller 2

+-viewcontroller 3

等等

我希望能够从主视图控制器切换和切换回其他视图控制器之一,并且还可以在其他视图控制器之间切换。 我所知道的所有 iOS 模式似乎对该用例都有问题:

UITabbarController 将是正确的选择,如果我能做到 标签栏消失 - 它不适合设计。我能够隐藏 栏,但视图控制器屏幕不会自行调整大小并且 整个事情感觉很hackish。

UINavigationController 是为 的顺序而设计的 屏幕,滑入式动画也不适合设计

模态视图控制器也适用于顺序,另外我必须保留 跟踪堆栈上有多少视图控制器。此外,还有一个 关闭视图控制器的时间问题并立即 呈现下一个。

我猜我可以在视图控制器中切换视图,但是 视图控制器有各种各样的子任务要做。我最终会得到 一个巨大的视图控制器和许多嵌入的方法 不同的看法。

我的问题: 以我想要的任何顺序管理一堆视图控制器的最佳方法是什么?

感谢您的帮助!

【问题讨论】:

【参考方案1】:

我会有一个主要的UIViewController。那一个将引用其他三个UIViewControllers。然后你可以在你的主 UIViewController 内部做这样的事情:

[self.view addSubview:view1.view];

这可行,但我不建议您这样做,因为这不是自然的做法。正如苹果所说:

您不应该使用视图控制器来管理仅填充 窗口的一部分——也就是说,只有窗口定义的区域的一部分 应用程序内容矩形。如果你想有一个界面 由几个较小的视图组成,将它们全部嵌入到一个根中 使用您的视图控制器查看和管理该视图。

【讨论】:

这种方法的问题是,我添加了视图,但该视图的视图控制器只是部分控制。据我记得,只有 viewDidLoad 被调用,而不是 viewWillAppear (或类似的东西)。如果这是可以接受的,我会采用我的最后一种解决方案,因为处理一个 vc 而不是几个,其中大多数都不能正常工作......【参考方案2】:

好的,我的解决方案并不完美,但似乎可行: 创建一个 UINavigationController。 使用 viewcontrollers: 方法根据自己的喜好添加一堆 viewcontrollers。 在视图控制器之间切换时,重建堆栈并再次附加。

问题:您只能使用导航控制器动画(滑入/滑出)。 但是您可以禁用 navigationcontrollers 动画,获取下一个 viewcontrollers 视图,使用 UIView 动画对其进行动画处理,然后如上所述通过堆栈构建切换到视图控制器本身。

真的远非完美,但有效。

【讨论】:

以上是关于没有 modal、tabbar 和 navigationcontroller 的 UIViewController 工作流管理?的主要内容,如果未能解决你的问题,请参考以下文章

uni 小程序遮罩覆盖tabbar (伪)

Modal Viewcontoller 覆盖 uiTabBar

有没有办法从嵌入式 ViewController 更改 Tabbar 图像和操作?

TabBar 选择指示器图像在 Objective C 中没有占据 tabBar 高度的整个大小

Swift:裁剪没有 TabBar 和 NavigationBar 的屏幕截图

没有设置触摸手势,但 tabBar 只响应长按。为啥?