Как отобразить боковое меню с помощью swrevealviewController, когда контроллер showview не существует? - PullRequest
0 голосов
/ 25 октября 2018

У меня есть боковое меню с использованием SwRevealViewController.У меня есть настройки с интерфейсом Builder и работает так, как нужно.Это дизайн storyBoard

Istoryboard

Следуя потоку приложения, всегда нужно пройти мимо красного навигационного viewController, который обрабатывает меню, желтыйодин - это представление меню, а зеленый - это один контроллер представления, который мне нужно представить при получении push-уведомления, независимо от состояния приложения.Пока я могу это сделать, перейдите к зеленому контроллеру вида, не проходя мимо красного, используя этот код:

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 голосов
/ 29 октября 2018

я наконец-то решил, как показать боковое меню, идущее из appdelagte, когда получено push-уведомление.поэтому идея состоит в том, чтобы создать экземпляр контроллера навигации перед контроллером представления, чтобы он имел панель навигации.

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()

, затем в верхнем контроллере представленной навигации.проверьте, что идентификатор не равен нулю, тогда представьте следующее представление.а затем в представленном виде.в этом случае покажите этот код, покажите боковое меню.

 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
        }

и вуаля, боковое меню появится и будет работать как положено.

...