ios - 从静态结构更新 tabbarcontroller 角标(Badge)

标签 ios swift

我不确定这是否可行,或者我是否以错误的方式解决这个问题,但是...

我有一个电子商务应用程序。您可以将产品添加到购物车。我想在购物车上方显示带有购物车中商品数量的角标(Badge)。

但是,我的购物车处于静态结构中,需要更新 tabbarController。

如何让这两者相互通信?

购物车

import Foundation
struct Cart {
    static var items: [CartItem] = []

    static func updateItem(id:Int,increment:Int){
        var itemAdded = false

        for (index, item) in items.enumerated() {
            if item.fabric.id == id {
                item.quantity = item.quantity+increment
                if item.quantity <= 0 {
                    items.remove(at: index)
                }
                itemAdded = true
            }
        }


        if !itemAdded {
            // fabric not in cart
            // add it
            for item in API.fabrics{
                if item.id == id{
                    items.append(CartItem(fabric: item, quantity: 1))
                    return
                }
            }
        }


          // AREA IN QUESTION
//        let MainTabBarController = AppDelegate
//        if let tabItems = tabBarController?.tabBar.items{
//            
//        }
    }



}

class CartItem{
    let fabric: Fabric
    var quantity: Int

    init(fabric: Fabric,
         quantity: Int){
        self.fabric = fabric
        self.quantity = quantity
    }
}

应用委托(delegate)

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
    // Override point for customization after application launch.

    UIApplication.shared.statusBarStyle = .lightContent

    window = UIWindow(frame: UIScreen.main.bounds)

    let storyboard = UIStoryboard(name: "Main", bundle: nil)

    let MainTabBarController = storyboard.instantiateViewController(withIdentifier: "MainTabBarController")


    window?.rootViewController = MainTabBarController
    window?.makeKeyAndVisible()

    return true
}

最佳答案

您可以使用 NSNotificationcenter.post(_ notification: Notification) ,因此每次您将商品添加到购物车时都会发布通知,并且您的 TabController 可以订阅此通知并处理它。像这样的东西:

import NotificationCenter
import UIKit

struct Cart {

    func add(item: Int) {
        // Your code to handle stuff...
        let numberOfItems = item
        let notification = Notification(name: Notification.Name(rawValue: "addItem"), object: nil, userInfo: ["numberOfItems":numberOfItems])
        NotificationCenter.default.post(notification)
    }

}

class YourTabBarController: UITabBarController {

    override func viewDidLoad() {
        NotificationCenter.default.addObserver(self, selector: #selector(handleAddItem), name: NSNotification.Name(rawValue: "addItem"), object: nil)
    }

    @objc func handleAddItem(notification: Notification) {
        // increment badge value
        tabBar.items?.first?.badgeValue = "\(notification.userInfo!["numberOfItems"]!)"
    }

}

当然,您可以执行相同的操作来删除项目和您需要的所有其他内容。

关于ios - 从静态结构更新 tabbarcontroller 角标(Badge),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52214180/

相关文章:

ios - Xcode 8 找不到此可执行文件的有效配置文件

ios - Facebook 分享链接和屏幕截图的问题

ios - 在 tableViewCell 中使用 segue 传递数据

ios - AWS S3 HeadObject 无法解析 Dispatch_Once

ios - 有没有办法保护 iPhone 应用程序中的内容(图像、声音)?

ios - 启动框架/Info.plist : No such file or directory 时所有框架错误

ios - UIImageView 上的 contentMode (scaleAspectFill) - Swift

json - 将 json 输出解码为模型

ios - 本地化字符串仅通过 Interface Builder 应用翻译

ios - 如何使用swift将两个加在一起的变量转换为标签文本