我不确定这是否可行,或者我是否以错误的方式解决这个问题,但是...
我有一个电子商务应用程序。您可以将产品添加到购物车。我想在购物车上方显示带有购物车中商品数量的角标(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/