Обновить значок не выбранного tabBarItem в Swift

У меня есть контроллер навигации с 4 элементами панели вкладок. У каждого есть контроллер навигации внутри. Я хочу, чтобы иметь возможность изменить номер значка 4-й строки вкладки, когда я получаю push-уведомление, независимо от того, в каком виде или вкладке я. Мне нужно использовать авто-макет, поэтому я не могу использовать какое-либо программное решение внутри делегата приложения, Я начал проект с одного шаблона представления.

Я попытался перейти на желаемую вкладку, изменить значение значка и вернуться, но, конечно, это не сработало. Кажется, что tabBarController имеет только ссылки на текущий элемент панели табуляции.

    var current = self.tabBarController?.selectedIndex
    self.tabBarController?.selectedIndex = 3
    self.navigationController?.tabBarItem.badgeValue = "34"
    self.tabBarController?.selectedIndex = current!

Ответ 1

Нет необходимости выбирать этот индекс для обновления значения значка. Возьмите массив элементов панели вкладок. Выберите элемент в индексе, который вы хотите обновить, и установите для него значение значка. Смотрите ниже, я сделал для 4-го элемента панели вкладок.

Swift 5.0

if let items = self.tabBarController?.tabBar.items as NSArray? {
    let tabItem = items.object(at: 3) as! UITabBarItem
    tabItem.badgeValue = "34"
}

Ответ 2

Короче:

let tabItem = self.tabBarController?.tabBar.items![3]
let tabItem.badgeValue = "34"

Ответ 3

extension UITabBarController {
    func increaseBadge(indexOfTab: Int, num: String) {
        let tabItem = tabBar.items![indexOfTab]
        tabItem.badgeValue = num
    } 
}

и вы можете называть его следующим образом:

self.tabBarController?.increaseBadge(indexOfTab: 3, num: "34")