Я не могу найти однозначного ответа на это, и я начинаю бороться. Самое близкое, что я получил на данный момент, это present
желаемый контроллер представления, но, очевидно, он отображает его модально, а не с помощью панели вкладок или навигационной панели.
В моей AppDelegate
есть функция didReceiveRemoteNotification
, чтобы попытаться обработать push-уведомления Firebase. По сути, я хотел бы иметь возможность автоматического перехода к определенному контроллеру представления в моем приложении на основе пары ключ-значение, которую я назначаю на консоли Firebase.
Пока мой делегат приложения выглядит так:
AppDelegate
func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable : Any], fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) {
let info = userInfo as NSDictionary
let name: String = info.value(forKey: "view-controller") as! String
switch name {
case "controller1":
print("controller1")
let storyBoard = UIStoryboard.getMainStoryboard().instantiateInitialViewController()
UIApplication.shared.delegate!.window!!.rootViewController = storyBoard
DispatchQueue.main.asyncAfter(deadline: .now() + 5.0) {
print("Time now reached")
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let controller1VC = storyboard.instantiateViewController(withIdentifier: "controller1VC") as! Controller1VC
self.window?.rootViewController?.present(controller1VC, animated: true)
}
default:
print("Nothing")
}
}
// and an extension I have...
extension UIStoryboard {
public class func getMainStoryboard() -> UIStoryboard {
return UIStoryboard(name: "Main", bundle: nil)
}
}
Итак, как вы можете видеть, я преобразовал name
в String
, чтобы я мог справиться с этим, затем я переключаю его в зависимости от результата. Он создаст экземпляр начального контроллера представления, который всегда будет MainMenuVC, а затем после 5-секундной задержки (это существует исключительно по причинам тестирования), я хочу, чтобы он перешел к Controller1VC.
Метод AppDelegate или View Controller?
Я на правильных линиях здесь? Или лучше передать результат в MainMenuVC и реализовать некоторую логику, чтобы затем сделать performSegue
, который сравнительно прост?
Как боковая панель, я получаю и считываю данные совершенно нормально из Firebase, мне просто нужно получить это, чтобы начать вести себя!
Заранее благодарим вас за любое направление, которое вы можете предложить.