Обновить значок не выбранного 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")