使用 UIAlertAction 快速增加标签栏徽章?

Posted

技术标签:

【中文标题】使用 UIAlertAction 快速增加标签栏徽章?【英文标题】:Increment tab bar badge w/ UIAlertAction swift? 【发布时间】:2015-04-24 02:13:56 【问题描述】:
@IBAction func addToCart(sender: AnyObject) 
    let itemObjectTitle = itemObject.valueForKey("itemDescription") as! String
    let alertController = UIAlertController(title: "Add \(itemObjectTitle) to cart?", message: "", preferredStyle: .Alert)
    let yesAction = UIAlertAction(title: "Yes", style: UIAlertActionStyle.Default)  (action) in
    var tabArray = self.tabBarController?.tabBar.items as NSArray!
    var tabItem = tabArray.objectAtIndex(1) as! UITabBarItem
    let badgeValue = "1"
    if let x = badgeValue.toInt() 
        tabItem.badgeValue = "\(x)"
    

我不知道为什么我不能只做 += "(x)"

错误: 二元运算符“+=”不能应用于“字符串?”类型的操作数和'字符串'

我希望它在每次用户选择“是”时增加 1。现在显然它只是停留在 1。

【问题讨论】:

【参考方案1】:

您可以尝试访问 badgeValue 并将其转换为 Integer,如下所示:

斯威夫特 2

if let badgeValue = tabBarController?.tabBar.items?[1].badgeValue,
    nextValue = Int(badgeValue)?.successor() 
    tabBarController?.tabBar.items?[1].badgeValue = String(nextValue)
 else 
    tabBarController?.tabBar.items?[1].badgeValue = "1"

Swift 3 或更高版本

    if let badgeValue = tabBarController?.tabBar.items?[1].badgeValue,
        let value = Int(badgeValue) 
        tabBarController?.tabBar.items?[1].badgeValue = String(value + 1)
     else 
        tabBarController?.tabBar.items?[1].badgeValue = "1"
    

要删除徽章,只需将 nil 分配给 badgeValue 覆盖 viewDidAppear 方法:

override func viewDidAppear(animated: Bool) 
    tabBarController?.tabBar.items?[1].badgeValue = nil

【讨论】:

你太棒了莱昂纳多!谢谢,工作得很好。 @Michael McKinley 谢谢【参考方案2】:

适用于 Swift 2:

            let tabController = UIApplication.sharedApplication().windows.first?.rootViewController as? UITabBarController
            let tabArray = tabController!.tabBar.items as NSArray!
            let alertTabItem = tabArray.objectAtIndex(2) as! UITabBarItem


            if let badgeValue = (alertTabItem.badgeValue) 
                let intValue = Int(badgeValue)
                alertTabItem.badgeValue = (intValue! + 1).description
                print(intValue)
             else 
                alertTabItem.badgeValue = "1"
            

【讨论】:

以上是关于使用 UIAlertAction 快速增加标签栏徽章?的主要内容,如果未能解决你的问题,请参考以下文章

UIAlertAction改变颜色[重复]

UIAlertAction 值列表

UIAlertAction 按钮文本左对齐

仅在验证输入后启用 UIAlertController 的 UIAlertAction

是否可以编辑 UIAlertAction 标题字体大小和样式?

是否可以编辑UIAlertAction标题字体大小和样式?