如何根据滑出菜单导航到不同的视图控制器

Posted

技术标签:

【中文标题】如何根据滑出菜单导航到不同的视图控制器【英文标题】:How to navigate to different view controllers based on slide out menu 【发布时间】:2016-04-30 03:06:11 【问题描述】:

我是 Swift 新手,现在已经尝试了很多小时。

我的应用如下所示:

理想情况下,我希望他们单击​​此弹出菜单中的一个选项,该选项会将他们带到另一个视图。现在,我在 QuotesTimelineViewController 上,但说我想点击书签按钮,然后我想去 SavedQuotesViewController。

这是我的故事板的样子:

QuotesViewController 中嵌入了 NavigationController。当您单击菜单按钮时,它会转到以模态方式呈现的 NavigationSideController。现在我不知道如何为我接下来要完成的事情制作转场。

这是我的 NavigationSideController 代码,所以现在当您单击导航边栏中的图标时会发生什么,它会关闭该动画并且导航边栏消失。也许你可以看到所有被注释掉的代码。

这是来自 QuotesTimelineViewController 的一些相关代码(我认为):

但我可能缺少一些东西,所以如果你想查看我的整个 repo,它就在这里:https://github.com/mayaah/ios-decal-proj4

任何指导都会很有帮助!最终,每当我单击导航侧栏中的图标时,我都会希望与该图标相对应的视图控制器会打开。到目前为止,我取得的最大进展是出现窗口层次结构错误!我猜是因为当我单击一个图标时,QuotesTimelineViewController 不是堆栈的顶部或我不知道的东西。

【问题讨论】:

@khuong291 这是什么意思? 这意味着当您按下slide out menu上的任何按钮时,它将通知更改ViewController @khuong291 是的,这就是我想做的,但我不知道该怎么做 @mayaah 这将帮助您理解:useyourloaf.com/blog/quick-guide-to-swift-delegates 【参考方案1】:

我可以在这里提出两个解决方案

    使用侧边菜单第三方库。

在创建应用端时需要注意很多事情 菜单包括嵌套层次/旋转、阴影等。第三个 派对图书馆将轻松处理它们并经过良好测试 代码。你可以从cocoacontrols中选择你喜欢的一个

    使用导航控制器并在表选择时更改 Active VC

    基本思想是在您的应用委托中创建一个新的 navigationController 并创建所有不同类型的入口点。 所以在你的应用委托中,声明一个新的UINavigationController 变量。

您不会在这种方法中使用故事板 initialVC。 在didFinishLaunching 应用委托的方法

var navController:UINavigationController!

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool 
    // Override point for customization after application launch.
    let storyboard = UIStoryboard(name: "Main", bundle: nil)
    // make sure to set storyboard id in storyboard for these VC
    let startingVC =  storyboard.instantiateViewControllerWithIdentifier("QuotesTimeLine");
    navController = UINavigationController(rootViewController: startingVC)
    self.window!.rootViewController = navController
    return true

然后在侧边菜单中,使用新的 VC 更新 navController 的 viewControllers

 func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) 
        let storyboard = UIStoryboard(name: "Main", bundle: nil)
        // make sure to set storyboard id in storyboard for these VC
        let startingVC =  storyboard.instantiateViewControllerWithIdentifier("NewVC");
        let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
        appDelegate.navController.viewControllers = [startingVC]
        dismissViewControllerAnimated(true, completion: nil)
    

这仍然是粗略的,但给出了管理层次结构所需的概念。 如果需要任何澄清,请告诉我。

【讨论】:

你是救生员,谢谢。我选择了选项 2 :)

以上是关于如何根据滑出菜单导航到不同的视图控制器的主要内容,如果未能解决你的问题,请参考以下文章

如何防止用户从滑出设置菜单中连续两次调用同一个视图控制器?

UI 未在 SWRevealViewController viewWillAppear 上更新

根据条件导航到不同视图控制器的按钮

触摸按钮时无法在滑出菜单中推动视图控制器

一个按钮,根据条件导航到不同的视图控制器

如何退出导航控制器?