4つのタブバーアイテムを備えたナビゲーションコントローラーがあります。それぞれの内部にナビゲーションコントローラーがあります。プッシュ通知を受け取ったときに、どのビューまたはタブに関係なく、4番目のタブバーバッジ番号を変更できるようにしたい。自動レイアウトを使用する必要があるため、アプリデリゲート内でプログラムによるソリューションを使用できません。 。単一のビューテンプレートからプロジェクトを開始しました。
目的のタブに移動し、バッジの値を変更して戻ってきましたが、もちろん機能しませんでした。 tabBarControllerには、現在のタブバーアイテムへの参照のみがあるようです。
var current = self.tabBarController?.selectedIndex
self.tabBarController?.selectedIndex = 3
self.navigationController?.tabBarItem.badgeValue = "34"
self.tabBarController?.selectedIndex = current!
バッジの値を更新するためにそのインデックスを選択する必要はありません。タブバーアイテムの配列を取ります。更新するインデックスでアイテムを選択し、バッジ値を設定します。以下を参照してください。4番目のタブバーアイテムについて実行しました。
Swift 5.
if let items = self.tabBarController?.tabBar.items as NSArray? {
let tabItem = items.object(at: 3) as! UITabBarItem
tabItem.badgeValue = "34"
}
短い:
let tabItem = self.tabBarController?.tabBar.items![3]
let tabItem.badgeValue = "34"
extension UITabBarController {
func increaseBadge(indexOfTab: Int, num: String) {
let tabItem = tabBar.items![indexOfTab]
tabItem.badgeValue = num
}
}
そして、あなたはそれをこのように呼ぶことができます:
self.tabBarController?.increaseBadge(indexOfTab: 3, num: "34")