导航控制器的最佳做法

时间:2019-04-23 18:34:21

标签: ios swift uinavigationcontroller appdelegate

当用户打开应用程序时,他/她将看到详细信息控制器。有一个问题,因为有两个视图控制器,列表和详细信息。我想从详细信息控制器开始,然后返回列表(向左滑动)。

现在,每个故事板都有一个视图控制器。我喜欢,很干净。我想保留它。并且,将会有更多的细节控制器(细节类型)。它会有一个详细控制器列表,以便在列表控制器中选择一个。

我尝试在情节提要中使用带有导航控制器的列表,但详细信息控制器没有导航控制器,因此导航堆栈中的弹出窗口不起作用。

我用Google搜索了,有一些解决方法-

  1. 在AppDelegate中为导航控制器创建一个单例,并将视图控制器添加到堆栈中。但不确定如何添加列表控制器,然后再添加明细控制器。

  2. Segues?

  3. 还有其他想法吗?

  4. 协调器模式(此简单应用程序的过度杀伤力)?

2 个答案:

答案 0 :(得分:1)

如果您不想使用导航控制器,但希望用户能够向左轻扫以从初始详细信息v.c.“返回”对于主控官来说,在我看来,您想要的是一个UIPageViewController,它提供了这种滑动功能。

但是,如果这确实是一个主从细节的情况,那么我认为您应该使用导航控制器(如果您现在不使用导航控制器),因为那是主从细节的自然表达。这是用户期望的结果,随着应用程序的发展,它将使您的事情变得简单得多。最初将应用程序启动到导航控制器内的详细视图控制器中没有任何困难。这就是我实际上推荐的方法。

答案 1 :(得分:1)

这时,您应该在应用启动时以编程方式处理它。您可以做的是创建一个包含列表和详细信息视图控制器的导航控制器,并将其设置为窗口根视图控制器。示例(假设两个视图控制器都在主故事板中):

var window: UIWindow!


func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {


    let firstVC = ListViewController.storyboardInstance()
    let secondVC = DefaultNoteController.storyboardInstance()

    let navigation = UINavigationController()
    navigation.viewControllers = [firstVC, secondVC] as! [UIViewController]
    window = UIWindow(frame: UIScreen.main.bounds)
    window.rootViewController = navigation


    return true
}

因此,应用程序应在导航控制器(详细信息)中显示第二个视图控制器,并带有一个包含后退按钮的导航栏。