swift4:如何检查用户是否已单击标签栏项目

时间:2018-05-29 10:40:45

标签: ios swift swift4.1

之前已经问过这个问题并且已经回答过,我的问题并不是唯一的,但必定会有一些缺失。我之前只是尝试检查用户是否登录到应用,因​​为他的数据存储在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()是我创建的用于显示吐司的功能        并且UserStorage.id返回存储在USerDefaults

中的用户ID     
  

这是显示我的结构的图像: this is image which shows my structure 我该怎么办?

1 个答案:

答案 0 :(得分: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)
    } 
}

}