簡體   English   中英

在通知中點擊時轉到特定視圖 controller 並且用戶未登錄

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM