当showview控制器不存在时,如何使用swrevealviewController显示侧面菜单?

时间:2018-10-25 20:52:22

标签: ios swift push-notification swrevealviewcontroller

我有一个使用SwRevealViewController的侧面菜单。我已经使用界面构建器进行了设置,并且按照需要的方式工作。这是StoryBoard的设计

Istoryboard

按照应用程序流程,它总是需要经过用于处理菜单的红色导航viewController,黄色的是菜单视图,绿色的是我在推送通知为无论应用程序状态如何,都可以收到。 到目前为止,我可以执行以下操作,使用以下代码转到绿色视图控制器,而无需经过红色视图控制器:

func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void) {
    let userInfo = response.notification.request.content.userInfo
    print("did Recive remote")
    if let messageID = userInfo["gcmMessageIDKey"] {
        print("Message ID: \(messageID)")
    }
    print(userInfo)
    completionHandler()
    let storyboard = UIStoryboard(name: "Main", bundle: nil)
    let initialViewController = storyboard.instantiateViewController(withIdentifier: "porterDetail")
    self.window?.rootViewController = initialViewController
    self.window?.makeKeyAndVisible()
}

在该视图之后,将不再显示导航控制器,甚至无法使用此代码创建侧面菜单。

let storyboard = UIStoryboard(name: "Main", bundle: nil)
    let initialViewController = storyboard.instantiateViewController(withIdentifier: "SWRevealViewController") as! SWRevealViewController
    self.navigationItem.leftBarButtonItem = UIBarButtonItem(image: UIImage(named: "ico_menu"), style: .plain, target: initialViewController, action: #selector(initialViewController.revealToggle(_:)))

但是没有显示菜单,因此没有任何反应。任何想法如何在此视图中显示菜单以允许用户外出,或者还有什么其他方法可以查看和保持导航。

1 个答案:

答案 0 :(得分:0)

我终于解决了当收到推送通知时如何显示来自appdelagte的侧面菜单的问题。 因此,想法是在视图控制器出现之前先实例化一个导航控制器以具有导航栏。

let menuVC = storyboard.instantiateViewController(withIdentifier: "menuVC")
        let chatVC = storyboard.instantiateViewController(withIdentifier: "chatNC")
        ((chatVC as! UINavigationController).topViewController as! newChatViewController).id = id
        let mainRWVC = storyboard.instantiateViewController(withIdentifier: "SWRevealViewController") as! SWRevealViewController
        mainRWVC.setRear(menuVC, animated: true)
        mainRWVC.setFront(chatVC, animated: true)
        self.window?.rootViewController = mainRWVC
        self.window?.makeKeyAndVisible()

然后在所显示导航的topViewcontroller中。检查ID是否为nil,然后显示下一个视图。然后在显示的视图中。在加载此代码后,显示了侧面菜单。

 self.navigationItem.leftBarButtonItem = nil
        let revealViewController = self.revealViewController()
        revealViewController?.rearViewRevealWidth = ((UIScreen.main.bounds.width * 74.6875) / 100)
        if revealViewController != nil{
            let button1 = UIBarButtonItem(image: UIImage(named: "ico_menu"), style: .plain, target: self.revealViewController(), action: #selector(SWRevealViewController.revealToggle(_:))) // action:#selector(Class.MethodName) for swift 3
                self.navigationItem.leftBarButtonItem  = button1
            self.navigationItem.leftBarButtonItem?.tintColor = .white
        }

然后瞧瞧,出现侧面菜单并按预期工作。