如何正确推送视图控制器

Posted

技术标签:

【中文标题】如何正确推送视图控制器【英文标题】:How to push viewcontroller correctly 【发布时间】:2015-10-08 14:06:39 【问题描述】:

这是我的故事板:

简短说明:

我的应用从 LaunchController 开始 模态序列显示 Reveal View Controller 这带来了菜单控制器和我的主导航控制器(ID “导航控制器”;绿色导航栏)在一起。这将创建一个幻灯片 菜单。 (基本代码: appcoda.com/ios-programming-sidebar-navigation-menu/) 我的主导航控制器显示一个 TableViewController。 这个有一个菜单按钮(3 行),用于制作幻灯片菜单 可见 加号图标将推送最后一个视图控制器(ID:“VC1”)。

我的问题: 我想为我的应用设置快速操作。 此代码帮助适用于此:

@available(iOS 9.0, *)
    func handleShortcut( shortcutItem:UIApplicationShortcutItem ) -> Bool 

        var succeeded = false

        let storyboard = UIStoryboard(name: "Main", bundle: nil)
        let initialViewController = storyboard.instantiateViewControllerWithIdentifier("NavController")
        self.window?.rootViewController = initialViewController

        let navVC = self.window?.rootViewController as! UINavigationController

        switch shortcutItem.type 

        default:
            navVC.pushViewController(storyboard.instantiateViewControllerWithIdentifier("VC1"), animated: false)
            succeeded = true
            break
        
        return succeeded

    

此代码将 NavController 设置为初始 Controller 并推送到 VC1。 这很好用。

使用 VC 1 中的 X 图标,我使用展开功能回到 TableView。 问题:如果我使用展开功能并退回到 tableview 我无法打开幻灯片菜单。触摸菜单图标没有任何反应。

问题可能是,我使用 Reveal View Controller 后面的快速操作启动应用程序。

我该如何解决这个问题?

【问题讨论】:

您好 Ghost108,您现在有解决问题的方法吗?可以分享给大家吗? 【参考方案1】:

您是否尝试将显示视图控制器设置为应用程序的入口点并删除启动控制器,因为如果您只想返回主视图,您可以这样做:

    let storyboard = UIStoryboard(name: "Main", bundle: nil)
    let controller = storyboard.instantiateInitialViewController() as UIViewController!
    self.presentViewController(controller, animated: false, completion: nil)

如果你不能解释启动控制器的用途吗?

【讨论】:

启动控件无法删除。你能用我的帖子 1 示例向我展示我的解决方案的完整代码吗

以上是关于如何正确推送视图控制器的主要内容,如果未能解决你的问题,请参考以下文章

如何正确地动画推送带有透明导航栏和工具栏的视图控制器?

即使正确刷新视图,为啥 NavigationLink 不会自动推送下一个控制器?

单击推送通知时,正确重定向到选项卡栏导航控制器内的视图控制器

didReceiveRemoteNotification 从 tabbarcontroller 推送视图控制器

如何从导航堆栈中推送/弹出uiviewcontroller时收到警报

当我点击 UITableViewCell 时,视图控制器没有被推送。