swift4: как проверить, нажал ли пользователь перед тем, как щелкнул элемент панели вкладок - PullRequest
0 голосов
/ 29 мая 2018

Этот вопрос был задан ранее и на него дан ответ, мой вопрос не уникален, но в нем, должно быть, что-то отсутствует.Я просто пытаюсь проверить, входил ли пользователь в приложение раньше, так как его данные хранятся в 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")
}
}

iхотите проверить, открыт ли пользователь MessageViewController, тогда, если пользователь вошел в систему для печати чего-либо, но он всегда печатает faaaaaaaalse

примечание: Toast.toast() - это функция, которую я создалчтобы показать тост и UserStorage.id возвращает идентификатор пользователя, хранящийся в USerDefaults

это изображение, которое показывает мою структуру: this is image which shows my structure что мне делать?

1 Ответ

0 голосов
/ 29 мая 2018

Только корневыми контроллерами панели вкладок являются 2 навигационных контроллера, а не MessageViewController.Во-первых, с tabBarController вы должны найти navigationController, который содержит ваш MessageViewController, чем в этой навигации найти нужный 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)
    } 
}

}
...