ios - swift4:如何检查用户是否在点击标签栏项目之前登录
问题描述
这个问题之前已经被问过并得到了回答,我的问题不是唯一的,但一定有什么遗漏。我只是想检查用户之前是否登录到应用程序作为他的数据存储UserDefaults
但它对我不起作用,这是我的类TabBarViewController
class TabViewController: UITabBarController, UITabBarControllerDelegate {
override func viewDidLoad() {
super.viewDidLoad()
self.delegate = self
}
// UITabBarDelegate
override func tabBar(_ tabBar: UITabBar, didSelect item: UITabBarItem) {
print("Selected item")
}
// UITabBarControllerDelegate
func tabBarController(_ tabBarController: UITabBarController, didSelect viewController: UIViewController) {
if(viewController is MessagesViewController) {
print("trueee")
if(UserStorage.id == "") {
Toast.toast(messsage: "not loggoed user", view: self.view)
}
} else {
print("faaaaaaaalse")
}
print("Selected view controller")
}
}
我想检查用户是否打开MessageViewController
然后如果用户登录打印一些东西,但它总是打印faaaaaaaalse
注意:
Toast.toast()
是我创建的用于显示 toast 并UserStorage.id
返回存储在 USerDefaults 中的用户 ID 的函数
解决方案
只是您的标签栏的根控制器是 2 个导航控制器,而不是 MessageViewController。首先使用 tabBarController,您必须找到包含您的 MessageViewController 的 navigationController,而不是在此导航中找到所需的 ViewController。
所以我有你的解决方案:
import UIKit
class TabbarController: UITabBarController, UITabBarControllerDelegate {
override func viewDidLoad() {
super.viewDidLoad()
self.delegate = self
// for tab bar initialization
if let viewControllers = self.viewControllers,
viewControllers.count >= 1,
// the index of viewController is 0 here, but if your tab bar's started controller is not 0 you can set yours
let navigationController = viewControllers[0] as? UINavigationController {
for controller in navigationController.viewControllers {
if let messagesViewController = controller as? MessagesViewController {
doWithMessagesViewControllerWhatYouWant(_viewController: messagesViewController)
}
}
}
}
// UITabBarControllerDelegate
func tabBarController(_ tabBarController: UITabBarController, didSelect viewController: UIViewController) {
if let navigationController = viewController as? UINavigationController{
for controller in navigationController.viewControllers {
if let messagesViewController = controller as? MessagesViewController {
doWithMessagesViewControllerWhatYouWant(_viewController: messagesViewController)
}
}
}
}
private func doWithMessagesViewControllerWhatYouWant(_viewController: MessagesViewController) {
print("do some operations with messagesViewController")
if(UserStorage.id == "") {
Toast.toast(messsage: "not loggoed user", view: self.view)
}
}
}
推荐阅读
- node.js - 当firebase云功能完成时redux-sagas不调度动作
- laravel - Laravel 路由组前缀 - 变量不起作用
- javascript - 添加客户端字段验证 Odoo 的 POS
- python - django:登录后重定向到引用页面
- javascript - 使用 node-fetch 在节点中发布单元测试此功能
- r - 为行编写函数意味着
- javascript - 在谷歌脚本的同一行上打印值时遇到问题(打卡/打卡系统)
- java - 无法在 Java 中使用 rmdir /s /q 删除目录
- javascript - Internet Explorer 支持被删除
- swift - 如何更新 swift 工具版本?