Swift 如何模仿 navigationController ,没有导航栏

标签 swift navigation navigationcontroller

我想将 viewController 保留在内存中,并稍后通过调用 vc3 和 vc6 示例以自定义顺序显示它们,而无需再次初始化它们,它们必须保持相同的状态。我曾想过使用 navigationController ,但我不想要导航栏,并且我不确定是否可以按自定义顺序调用 viewcontroller 。我尝试将 viewController 放入全局数组中,但是当我调用它们时出现错误:“应用程序试图以模态方式呈现事件 Controller ”。您对此有何看法,我如何处理我的 View Controller 并显示它们而不再次初始化它们。我一直在听。

我读到在 IOS 中我们必须回收 View ,所以我有一个问题。处理回收 View 的最佳方法是什么。如果我想为我的用户提供相同的 View ,而不初始化负责该 View 的 View Controller 。我必须如何做到这一点,采用的最佳结构选择是什么.. 有一个大 View Controller 并使用 addsubview removesubview 处理 View ...或每个 View 类型有多个 View Controller ,在这里我不知道如何回收和跟踪我的 View Controller (我不想使用导航 Controller )。

最佳答案

首先,您可以在导航 Controller 中隐藏导航栏:

  • self.navigationBarHidden = true(对于 UINavigationController)

  • self.navigationController?.navigationBarHidden = false(对于 UINavigationController 内的 UIViewController)

在您的情况下,存储在全局数组中也是可以的(但最好有辅助类),因此虽然您的 UIViewControllers 将位于内存中 - 您可以重用它们。

您的问题与导航有关(好的答案在这里 - https://stackoverflow.com/a/7534019/1830598 )。因此,您必须通过再次取消并呈现 UINavigationController 来管理此订单,或者找到其他解决方案。

您的用例示例:

  1. 使用任何 ViewController 呈现 UINavigationController
  2. 将任何 View Controller 存储为storedViewController
  3. UINavigationControllerrootViewController 处(显示的)添加代码:self.navigationController?.viewControllers = [storedViewController, self]<
  4. 现在您将位于 UINavigationController 处的第二个 View Controller ,按回键即可到达 storedViewController

关于Swift 如何模仿 navigationController ,没有导航栏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37595844/

相关文章:

ios - 无法快速使用 CLGeoCoder 获取州和邮政编码?

swift - 如何在Swift中编写可测试的代码

IE7 导航的 HTML 和 CSS 问题

ios - navigationController alpha 会重置吗?当应用程序从后台激活时

IOS7 navigatinBar tintColor popover 变化

ios - 如何推送以编程方式创建的 UINavigationController 的新 View 宽度?

ios - 如何在 SwiftUI 中获取 MKMapView 方向

swift - 将字符串索引转换为 Int

ios - 更改通过 ActivityView 打开的电子邮件对话框的色调

swiftui - 应用 onLongPress 修饰符时,使用 NavigationLink 进行点击导航被破坏