swift - 快速弹出视图控制器时导航栏中的购物车计数未更新
问题描述
我已经创建了带有购物车的自定义导航栏及其计数,如下所示:如果我调用setUpNavigationBar()
所有视图控制器,我将获得带有购物车和计数的导航栏
func setUpNavigationBar(){
self.navigationController?.navigationBar.backgroundColor = CommonColor.navigationColor
self.navigationController?.navigationBar.barTintColor = CommonColor.navigationColor
self.navigationController?.navigationBar.isTranslucent = false
self.navigationController?.navigationBar.layer.masksToBounds = false
let cartBtn: BadgeButton = BadgeButton(type: .custom)
cartBtn.setImage(#imageLiteral(resourceName: "icon55"), for: .normal)
cartBtn.addAction(for: .touchUpInside) {
print("in cart")
let signupVC = (StoryBoard.driver).instantiateViewController(identifier: "ShoppingCartVC") as! ShoppingCartVC
self.navigationController?.pushViewController(signupVC, animated: true)
}
cartBtn.frame = CGRect(x: 0, y: 0, width: 20, height: 20)
let cartQty = UserDefaults.standard.value(forKey: "cartCount")
cartBtn.badgeText = cartQty as? String
let btnCart = UIBarButtonItem(customView: cartBtn)
self.navigationItem.setRightBarButton(btnCart, animated: true)
}
func setBadgeCountForCart(with : String?){
let badge = self.navigationItem.rightBarButtonItems?.map({$0.customView}).filter({$0 is BadgeButton}).first as? BadgeButton
badge?.badgeText = with
}
但是在 ShoppingCartVC
我不想要导航栏时,我没有调用setUpNavigationBar
ShoppingCartVC viewdidload
因此,如果从购物车中删除产品并单击后退按钮,ShoppingCartVC
则 cartConut 不会在弹出的视图控制器中更新
删除产品后,我更新了 cartCount,如下所示:
class ShoppingCartVC: UIViewController {
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(true)
self.navigationController?.navigationBar.isHidden = true
self.serviceCall()
}
func serviceCall(){
self.cartDB = ShoppingCartDetaModel(dictionary: responseData.dict as NSDictionary? ?? NSDictionary())
UserDefaults.standard.set(self.cartDB?.result?.cart?.total_item, forKey: "cartCount")
self.setUpNavigationBar()
}
@IBAction func back(_ sender: UIButton){
self.navigationController?.navigationBar.isHidden = false
self.serviceCall()
UserDefaults.standard.set(self.cartDB?.result?.cart?.total_item, forKey: "cartCount")
self.setUpNavigationBar()
self.navigationController?.popViewController(animated: true)
}
}
我应该在哪里改变,请帮忙
解决方案
导航回来后,您需要使用更新的数量更新BadgeButton
其属性。text
您可以使用不同的方法来实现这一目标。最简单且不太干净的方法是调用self.setUpNavigationBar()
该viewWillAppear
方法。一种更简洁的方法是使用NotificationCenter
class 或 aPublisher
并在每次数量变化时发布更新。
ViewWillAppear:https ://developer.apple.com/documentation/uikit/uiviewcontroller/1621510-viewwillappear
通知中心:https ://developer.apple.com/documentation/foundation/notificationcenter
发布者:https ://developer.apple.com/documentation/combine/publisher
推荐阅读
- c# - Android:通过蓝牙将元数据从媒体播放器应用程序发送到汽车音响阻止广播接收器播放下一首歌曲或暂停音乐
- java - 增加彩信图片的宽度和高度
- javascript - 65536 处的 getSelection() 错误
- python - 获取在 Python 中调用方法的对象
- python - Matplotlib:所有组的堆积面积图
- c# - 如何在具有 MVC 5 的类库项目中使用 Entity Framework 6 Code First
- cron - 每个月按不同时区的国家/地区运行定期任务
- apache-kafka - Kafka ACL 导致主题复制失败
- c# - 在包含许多项目的 Excel 中查找总和为 0 的值
- android - 无法在 Android Studio 之外安装基于 CLI 构建的应用程序 - “删除失败”错误/base.apk 代码缺失