[英]Going to a specific view controller when tapped in a notification and user is unlogged
我在 Swfit 4 中有這個應用程序,我想 go 到特定視圖 controller。 當用戶登錄時,我讓它工作:
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
,在 leftViewController 上是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
storyboard 入口點是UINavigationController -> LoginViewController
I have try passing a variable to the LoginViewController
when the user tap's in the notification instead of pushing the view controller to the navigation controller, and in the LoginViewController
if it's coming from the notification go the specific view controller.
但我似乎找不到LoginViewController
視圖 controller 來傳遞變量。
這是我在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
}
}
有什么想法可以解決這個問題嗎?
我認為你真正需要做的是一個 AppContext 之類的東西。 您將需要一個 class 來保存應用程序的上下文,在這種情況下是傳入的通知。
收到通知后,准備一個表示通知名稱類型的枚舉。 一旦收到通知,請始終檢查 isUserLoggedIn() 是否,然后處理請求。 或者干脆讓用戶登錄。
登錄完成后,請確保您首先檢查 Appcontext.hasNotificationToProcess(),然后在您的登陸視圖 controller 內執行該操作。
這總是強制應用程序首先檢查身份驗證,然后處理通知。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.