【问题标题】:How to update ContainerViewController from several VC's?如何从几个 VC 更新 ContainerViewController?
【发布时间】:2020-06-15 08:22:40
【问题描述】:

我为我的应用程序的大多数 VC 添加了一个小型容器视图,该视图将用作购物车预览,显示购物车中的商品数量和总金额。可以从应用程序内的多个位置将内容添加到购物车,因此我正在寻找在发生时更新容器 VC 的最佳选项。我认为有比找到正确的 VC 并从我可以添加到购物车的所有位置调用更新函数更好的方法吗?是否可以保留 VC 的共享实例?

我找到了一些关于此的帖子,但由于我可以从很多地方(VC、Cells、JSON 等)更新购物车,所以我正在寻找最容易维护的。

  • 我知道我可以使用协议和委托,但是我必须在每个视图中设置委托
  • 我知道我可以找到子 VC (Updating Content In Container View),但由于每个 TabBarItem 有两个容器,我必须来回遍历子/父才能正确更新(添加到购物车发生在大型 VC 中(见附件img)和CartPreview是小的。如果这两个没有相互关系,我必须从大到父母,然后从父母到孩子(小)。

故事板的一部分:

容器 VC

    override func viewWillAppear(_ animated: Bool) {
        updatePreviewBar()
    }

    func updatePreviewBar() {
        numberOfItemsInCartLabel.text = "\( String(Cart.sharedInstance.order.items.count)) items"
        amountLabel.text = String(Cart.sharedInstance.order.total.withTousandSeparator)
    }

提前致谢!

【问题讨论】:

    标签: ios swift xcode


    【解决方案1】:

    您可以使用属性观察器并在订单总值发生更改时发送通知。

    extension Notification.Name {
        static let cartUpdate = Notification.Name(
           rawValue: "cartUpdate")
    }
    
    struct Cart { 
      static var orderTotal = 0.0 { 
         didSet { 
            NotificationCenter.default.post(name: .cartUpdate, object: nil)
         }
      }
    }
    

    然后在您的 CartContainerVC 中,您可以放置​​一个通知观察者,该观察者将在 orderTotalValue 更改时调用。

    override func viewDidLoad() {
        super.viewDidLoad()
        NotificationCenter.default.addObserver(self, selector: #selector(updateCart), name: .cartUpdate, object: nil)
    }
    
    @objc func updateCart() {
        // this function will be called whenver cart value changes. update your textfields here
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-04-04
      • 2011-07-30
      • 2016-02-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多