gpt4 book ai didi

Swift:从 appDelegate 更改 tabBar 图标

转载 作者:搜寻专家 更新时间:2023-10-31 23:06:45 25 4
gpt4 key购买 nike

我想从 appDelegate 更改我的标签栏的图标。

我会解释我为什么要这样做。

我从我的网站通过推送向我的应用程序发送数据,因此在 appdelegate 中我在函数 didReceiveRemoteNotification 中接收数据,我使用这些数据手动创建本地通知。我还希望能够修改我的 TabBar 的图标以显示有新通知。

那么如何通过app delegate改变tabbar的图标呢?

这是我的应用程序的照片,绿色圆圈是表示“新通知”的部分

My App images

这是我在 appdelegate 中的代码:

func application(_ application: UIApplication, didReceiveRemoteNotification data: [AnyHashable: Any]) {
if let data = data as? NSDictionary {
print("Title: \(data)")

LocalNotification.createLocalNotificationWithIntervals(identifier: "Push",
title: data["title"] as! String,
body: data["body"] as! String,
intervals: 1) { error in

guard error == nil else {
print("Error: \(error!.localizedDescription)")
return
}

print("Successfully execute notification")
}
}
}

我使用了一个 tabor Controller :

class FittoTabBarController: UITabBarController {

let kImageNoLabelInset: CGFloat = 6.0

var selectedTab: FittoTabBar.Tabs = .pods {
didSet {
selectedIndex = selectedTab.rawValue
}
}

override func viewDidLoad() {
super.viewDidLoad()
selectedTab = .pods
removeItemsTitles()
}

override func tabBar(_ tabBar: UITabBar, didSelect item: UITabBarItem) {
guard let selectedItemIndex = tabBar.items?.index(of: item),
let selectedTab = FittoTabBar.Tabs(rawValue: selectedItemIndex) else {
return
}

self.selectedTab = selectedTab
}

private func removeItemsTitles() {
if let items = self.tabBar.items {
for item in items {
item.title = ""
item.imageInsets = UIEdgeInsets(top: kImageNoLabelInset, left: 0.0, bottom: -kImageNoLabelInset, right: 0.0)
}
}
}

我的应用程序的输入在标签栏 Controller 上

最佳答案

使用上面提供的代码,您需要按照以下步骤使其工作。

  1. 在您的 FittoTabBarController 中添加这些方法。

    func setBadge(_ value: String?) {
    _ = self.viewControllers![2].tabBarItem.badgeValue = value
    }

    func getBadge() -> String? {
    return self.viewControllers![2].tabBarItem.badgeValue
    }

    func resetBadge() {
    self.viewControllers![2].tabBarItem.badgeValue = nil
    }
  2. 在您的 appDelegate 中,在收到通知时获取窗口的 rootViewController

    func application(_ application: UIApplication, didReceiveRemoteNotification data: [AnyHashable: Any]) {
    if let data = data as? NSDictionary {
    print("Title: \(data)")

    let myTabBarController = self.window?.rootViewController as! FittoTabBarController
    var newBadgeCount = "1"
    if let currentBadgeCount = myTabBarController.getBadge() {
    // Convert to int
    var intValOfCurrentBadge = Int(currentBadgeCount)!

    // Increaset it by one.
    intValOfCurrentBadge = intValOfCurrentBadge + 1

    // Convert back to string.
    newBadgeCount = "\(intValOfCurrentBadge)"
    }

    // Set your badge value here.
    myTabBarController.setBadge(newBadgeCount)

    // ADD YOUR EXISTING CODE HERE
    }
    }
  3. 当用户点击第 3 个选项卡时,只需调用 resetBadge() 方法即可删除徽章计数。

希望对您有所帮助。

关于Swift:从 appDelegate 更改 tabBar 图标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52950902/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com