Как представить ViewController на SWRevealViewController с TabbarController в AppDelegate - PullRequest
0 голосов
/ 18 марта 2020

Я перенаправляю свое приложение для указания c вида контроллеров при уведомлении, нажимая AppDelegate, и для этого я использую настройку root метод контроллера вида, но в моем случае откройте панель вкладок этого базового вида, SWRevealViewController с TabbarController приложения и на данном контроллере представления запроса.

вот что я пробовал до сих пор:

self.window = UIWindow(frame: UIScreen.main.bounds)
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let homepage = storyboard.instantiateViewController(withIdentifier: "SWRevealViewController")
self.window?.rootViewController = homepage

let rootView = self.window!.rootViewController

let vc = UIStoryboard.init(name: "Ride", bundle: nil).instantiateViewController(withIdentifier:"payAfterPostRequestViewController") as! payAfterPostRequestViewController
rootView!.present(vc, animated: true, completion: nil)

здесь это то, что я получаю по приведенному выше коду:

* Попытка представить <****. payAfterPostRequestViewController: 0x1078e7600>, чье представление отсутствует в иерархии окон! *

1 Ответ

0 голосов
/ 18 марта 2020

может быть, это не лучший способ сделать это, но я почти решу это безумие. сначала попытайтесь установить переменную в представленном viewController

var shouldPresentOtherVC = false
override function viewDidAppear(){
  super.viewDidAppear()
  if shoulPresentOtherVC{
  //do the presentation here

, затем продолжайте, как вы делаете, но пропустите текущую часть

self.window = UIWindow(frame: UIScreen.main.bounds)
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let homepage = storyboard.instantiateViewController(withIdentifier: "SWRevealViewController")
self.window?.rootViewController = homepage
self.window?.makeKeyAndVisible()

, если представленный viewcontroller не нужен для этого из указанных c V C тогда я использовал этот код. на данный момент v c.

    extension UIWindow {
    func topViewController() -> UIViewController? {
        var top = self.rootViewController
        while true {
            if let presented = top?.presentedViewController {
                top = presented
            } else if let nav = top as? UINavigationController {
                top = nav.visibleViewController
            } else if let tab = top as? UITabBarController {
                top = tab.selectedViewController
            } else {
                break
            }
        }
        return top
    }
}

, чтобы найти topViewController, а затем после этой строки

self.window?.rootViewController = homepage`

добавить это.

let vc = UIStoryboard.init(name: "Ride", bundle: nil).instantiateViewController(withIdentifier:"payAfterPostRequestViewController") as! payAfterPostRequestViewController
self.window?.topViewController.present(vc, animated: true, completion: nil)
...