как динамически изменить заголовок UITabBarItem - PullRequest
0 голосов
/ 07 ноября 2018

У меня есть TabBarController в моем приложении, и 2-й элемент должен иметь заголовок Login или Profile в зависимости от того, вошел ли пользователь в систему или нет.

in TabBarController :

import UIKit

class TabNavigationBarVC: UITabBarController, UITabBarControllerDelegate {

    override func viewDidLoad() {
        self.delegate = self
        if UserDefaults.standard.bool(forKey: "isUserLoggedIn") {
            tabBar.items?[1].title = "Prof"
            tabBar.items?[1].image = UIImage(named: "user_male")

        } else {
            tabBar.items?[1].title = "Log"
            tabBar.items?[1].image = UIImage(named: "user_male")          
        }        
    }
}

и 2-й TabBarItem связан с RouterVC :

import UIKit
class RouterViewController: UINavigationController {
    override func viewDidLoad() {
        super.viewDidLoad()
        let profile = storyboard?.instantiateViewController(withIdentifier: "ComponentUserProfile") as? UserProfileViewController
        let login = storyboard?.instantiateViewController(withIdentifier: "ComponentLogin")  as? LoginViewController
        if UserDefaults.standard.bool(forKey: "isUserLoggedIn") {
        //profile?.tabBarItem.title = "prr" - no effect
        //profile?.tabBarItem = UITabBarItem(title: "PROFILE", image: UIImage(named: "user_male"), tag: 0) - no effect
            viewControllers = [profile] as! [UIViewController]
       } else {
        //login?.tabBarItem.title = "logg"- no effect
        //login?.tabBarItem = UITabBarItem(title: "LOGIN", image: UIImage(named: "user_male"), tag: 0)- no effect
            viewControllers = [login] as! [UIViewController]
       }
    }
}

все работает правильно, но только когда пользователь запускает приложение. Позже, после того как пользователь вышел из системы, я бы хотел, чтобы второй заголовок на панели вкладок изменился с Profile на login, или, когда пользователь успешно вошел в систему, с Login до Profile. Я пробовал что-то вроде закомментированных строк кода в RouterVC, но ничего не изменилось.

И в LoginVC эта строка тоже не работает:

override func viewWillAppear(_ animated: Bool) {
        self.tabBarItem.title = "loggggg"
    }

Как я могу сделать это изменение динамически?

Может быть, мне следует написать расширение для TabBarController, чтобы отслеживать, если UserDefaults.standard.bool(forKey: "isUserLoggedIn") изменилось, и отобразить правильный заголовок tabbarItem? ..

p.s.navigation между представлениями, вход / выход из системы работает хорошо, дело только в заголовке

p.p.s - найдите ответ, как получить доступ к заголовку из представления - добавьте self.tabBarController?.tabBar.items?[1].title = "profile", но все еще ищите какое-то общее решение, например, отслеживание UserDefaults key ..

1 Ответ

0 голосов
/ 07 ноября 2018

Вы можете обновить название выбранного элемента, используя

self.tabBarController?.tabBar.selectedItem?.title = "demo"
...