У меня есть это приложение в Swfit 4, и я хочу перейти к определенному контроллеру представления. Я заставил его работать, когда пользователь вошел в систему:
let storyboard = UIStoryboard(name: "Tracker", bundle: nil)
// instantiate the view controller we want to show from storyboard
// then we push the new view controller to it
if let conversationVC = storyboard.instantiateViewController(withIdentifier: "TrackerIntroViewController") as? TrackerIntroViewController {
conversationVC.isComingFromNotification = true
if let mainView = self.window?.rootViewController as? MainViewController {
let mainNavigationController = mainView.mainViewController
let menuTableViewController = mainView.leftViewController
if let nav2 = mainNavigationController as? UINavigationController {
nav2.dismiss(animated: true, completion: nil)
nav2.pushViewController(conversationVC, animated: true)
}
}
}
Но когда пользователь не заблокирован, когда пользователь нажимает на уведомление, он переходит к Tracker
, но без входа в систему, что делает его непригодным для использования.
Мне, очевидно, нужен другой подход, когда пользователь не вошел в систему, но я пока не нашел решения.
Точка входа в приложение - MainViewController: SlideMenuController
. На mainViewController на слайде - MainNavigationController
, а на левом ViewController - MenuTableViewController
class MainViewController: SlideMenuController {
var comingFromMedicationNotification: Bool = false
override func awakeFromNib() {
// Get the width.
let width = self.view.bounds.width - 50.0
if SlideMenuController.isLeft() {
SlideMenuOptions.leftViewWidth = width
} else {
SlideMenuOptions.rightViewWidth = width
}
// Scale the content.
SlideMenuOptions.contentViewScale = 1.0
if let controller = self.storyboard?.instantiateViewController(withIdentifier: "MainNavigationController") {
self.mainViewController = controller
// NEVER ENTERING HERE
if let loginViewController = self.mainViewController?.presentedViewController as? LoginViewController {
loginViewController.comingFromMedicationNotification = comingFromMedicationNotification
}
}
if let controller = self.storyboard?.instantiateViewController(withIdentifier: "MenuTableViewController") {
// Check the side.
if SlideMenuController.isLeft() {
self.leftViewController = controller
} else {
self.rightViewController = controller
}
}
super.awakeFromNib()
}
}
В MainNavigationController
- это место, где происходит вход в систему, и, если оно прошло успешно, оно переходит к DashboardViewController
.
MainNavigationController
Точка входа в раскадровку: UINavigationController -> LoginViewController
Я пытаюсь передать переменную в LoginViewController
, когда пользователь нажимает на уведомление, а не нажимает контроллер представления на навигацию. контроллер, и в LoginViewController
, если он приходит из уведомления, перейдите к определенному контроллеру представления.
Но я не могу найти контроллер представления LoginViewController
для передачи переменной.
Это то, что я пробовал в userNotificationCenter(_ center: UNUserNotificationCenter, didReceive ...)
, но это не входит ни в один из этих ifs
conversationVC.isComingFromNotification = true
if let mainView = self.window?.rootViewController as? MainViewController {
let mainNavigationController = mainView.mainViewController
if let main = mainNavigationController as? LoginViewController{
main.comingFromMedicationNotification = true
}
if let main2 = mainNavigationController?.presentedViewController as? LoginViewController {
main2.comingFromMedicationNotification = true
}
if let login = mainNavigationController?.presentingViewController as? LoginViewController {
login.comingFromMedicationNotification = true
}
}
Есть идеи, как мне подойти к этому?