gpt4 book ai didi

ios - 在通知中点击并且用户未登录时转到特定 View Controller

转载 作者:行者123 更新时间:2023-11-29 05:24:37 25 4
gpt4 key购买 nike

我在 Swfit 4 中有这个应用程序,我想转到特定的 View 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,左侧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 Storyboard入口点是 UINavigationController -> LoginViewController

当用户点击通知时,我尝试将变量传递给 LoginViewController ,而不是将 View Controller 推送到导航 Controller ,并且在 LoginViewController 中(如果是)来自通知的信息进入特定的 View Controller 。

但我似乎找不到 LoginViewController View 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这样的东西。您将需要一个类来保留应用程序的上下文,在本例中是传入的通知。

收到通知后,准备一个表示通知名称类型的枚举。一旦您收到通知,请始终检查是否 isUserLoggedIn() 然后处理请求。或者干脆让用户登录。

登录完成后,请确保首先检查 Appcontext.hasNotificationToProcess(),然后在您的登陆 View Controller 内对其进行操作。

这总是强制应用程序首先检查身份验证,然后处理通知。

关于ios - 在通知中点击并且用户未登录时转到特定 View Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58293646/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com