Как обновить количество значков со всех контроллеров представления? - PullRequest
0 голосов
/ 19 декабря 2018

В панели вкладок отображается куча значков.В моем приложении количество значков может изменяться в любое время, так как это приложение для чата в реальном времени, и пользователи могут общаться в чате с Android, веб-приложения и приложения для iOS.

Сейчас я выбираю количество значков в каждом контроллере представления в моем приложении.в viewWillAppear.Это работает, но я не уверен, что это лучший способ сделать это?

Есть ли лучший способ справиться с этим?Любой указатель будет оценен.Tx

Ответы [ 2 ]

0 голосов
/ 19 декабря 2018

Поскольку у вас есть доступ к общему экземпляру tabBarController , вы можете легко увеличить значение значка его элемента tabBar в любом UIViewController .Вы можете сделать это следующим образом:

if let tabBarItems = tabBarController?.tabBar.items {
     let tabItem = tabBarItems[0]
     tabItem.badgeValue = "1"
}
0 голосов
/ 19 декабря 2018

Вы можете создать подкласс UITabBarController (тогда вы должны установить класс вашего TabBarController для этого подкласса).Теперь внутри метода create и внутри этого метода объявите, что должно произойти, когда текущий selectedItem равен this или this UITabBarItem из tabBar 's items array

func changeBadge() {
    guard let item = tabBar.selectedItem else { return }
    guard let items = tabBar.items else { return }
    switch item {
    case items[0]:
        ... // get value
        item.badgeValue = "\(value)"
    case items[1]
        ... // get value
        item.badgeValue = "\(value)"
    ...
    default:
    }
}

Теперь просто вызовите этот метод, когда TabBarController загрузился и когда пользователь выбрал новый UITabBarItem

override func viewDidLoad() {
    changeBadge()
}

override func tabBar(_ tabBar: UITabBar, didSelect item: UITabBarItem) {
    changeBadge()
}

class TabBarController: UITabBarController {

    override func viewDidLoad() {
        changeBadge()
    }

    override func tabBar(_ tabBar: UITabBar, didSelect item: UITabBarItem) {
        changeBadge()
    }

    func changeBadge() {
        guard let item = tabBar.selectedItem else { return }
        guard let items = tabBar.items else { return }
        switch item {
        case items[0]:
            ... // get value
            item.badgeValue = "\(value)"
        case items[1]
            ... // get value
            item.badgeValue = "\(value)"
        ...
        default:
        }
    }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...