首页 > 解决方案 > 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 的函数

这是显示我的结构的图像: 这是显示我的结构的图像 我该怎么办?

标签: iosswiftswift4.1

解决方案


只是您的标签栏的根控制器是 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)
    } 
}

}

推荐阅读