Открытие определенного вида с помощью контроллера навигации из push-уведомления - PullRequest
0 голосов
/ 20 марта 2019

Я пытаюсь открыть определенный вид из push-уведомления, но я продолжаю терять панель навигации и обратные и последующие ссылки. вот так выглядит моя раскадровка (с видом, который я хочу открыть) http://tinypic.com/r/xnffhi/9.

вот что у меня в AppDelagate:

let storyboard = UIStoryboard(name: "Main", bundle: nil)
            let vc = storyboard.instantiateViewController(withIdentifier: "notification") as? NotificationViewController
            self.window?.rootViewController = vc

Ответы [ 3 ]

1 голос
/ 20 марта 2019

Как мы видим на скриншоте, который вы предоставили, контроллер корневого представления приложения является экземпляром UINavigationController.

И в соответствии с этим позвольте мне предложить следующий код:

func handleNotification(){
        let storyboard = UIStoryboard(name: "Main", bundle: nil)
        guard let vc = storyboard.instantiateViewController(withIdentifier: "notification") as? NotificationViewController else{
            debugPrint("NotificationViewController with identifier 'notification' not found")
            return
        }

        guard let navVC = self.window?.rootViewController as? UINavigationController else{
            debugPrint("RootViewController is not an UINavigationController")
            return
        }

        navVC.pushViewController(vc, animated: true) //perhaps your will prefer to use false
    }

Кроме того, вы можете использовать более гибкую реализацию.

В своем AppDelegate публиковать (NS) уведомление при перехвате уведомления, соответствующие контроллеры представления наблюдают за уведомлением и действуют, когда уведомление транслируется.

Вы также можете установить идентификатор для перехода и вызывать метод performSegue из наблюдающего контроллера вида

1 голос
/ 20 марта 2019

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

Вместо этого вам следует использовать свои знания о приложении для направления его на новый контент. Например, если ваш корневой контроллер представления является контроллером навигации, вы можете привести rootViewController к контроллеру навигации и передать его (это не удастся, если ваш корневой контроллер представления - это что-то еще, например контроллер панели вкладок).

guard let vc = storyboard.instantiateViewController(withIdentifier: "notification") as? NotificationViewController else {
  fatalError("Main Storyboard doesn't have a notification controller")
}
guard let nav = self.window?.rootViewController as? UINavigationController else {
  return //handle unexpected state
}
nav.push(vc, animated: true)

Другой вариант - встроить контроллер уведомлений в контроллер навигации, добавить кнопку Close и представить ее модально, чтобы вы могли представить ее поверх rootViewController независимо от того, что это за контроллер.

0 голосов
/ 20 марта 2019

Вы можете установить из раскадровки -> добавить контроллер вида -> встроить в контроллер навигации -> установить второй контроллер вида -> установить секвенс между этими контроллерами.Вы увидите такие же контроллеры представления, как это изображение.

...