您好,我正在使用 Collection View cell,我想在下一个视图控制器上记录点击了多少个 "made true" 和 return

Hello I am using a Collection View cell and I want to record how many of them are clicked "made true" and return on the next view controller

在这个详细视图控制器中,我有一个标签,告诉您已添加到购物车中的商品数量,我想获取在我的集合视图控制器中单击的商品数量和 return 该值进入我在详细视图控制器上的标签。在我的集合视图控制器中,单击集合视图单元格并更改其相应的 bool 值,然后我只希望对已更改的单元格进行计数并使用字符串插值传递以更新为购物车选择的项目数。

import UIKit


class ShoppingListDetailViewController: UIViewController {

    var shoppingItemController: ShoppingItemController?
    var itemsInCart = 0
    var shoppingItem: ShoppingItem?
    @IBOutlet weak var numberOfItemsLabel: UILabel!
    @IBOutlet weak var userAddressTextField: UITextField!
    @IBOutlet weak var userNameTextField: UITextField!
    @IBOutlet weak var submitOrderButton: UIButton!

    @IBAction func tappedSubmitOrder(_ sender: Any) {
        showAlert()
    }
    override func viewDidLoad() {
        super.viewDidLoad()

        // Do any additional setup after loading the view.
    }

    func showAlert() {
        let alert = UIAlertController(title: "Order Successful!!!", message: "\(userNameTextField.text ?? " ") your order will be delivered to \(userAddressTextField.text ?? " ")in 15 mins", preferredStyle: .alert)

        let okAction = UIAlertAction(title: "OK", style: .cancel, handler: nil)
        alert.addAction(okAction)
        present(alert,animated: true, completion: nil)
    }

    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
        if shoppingItem?.added.self == false {
            itemsInCart += 1
            numberOfItemsLabel.text = "You currently have \(itemsInCart) items(s) in your shopping list"
        }
    }
}

更新: 好的,您只需在 ShoppingListDetailViewController.viewWillAppear(_:) 函数中替换。

override func viewWillAppear(_ animated: Bool) { 
  super.viewWillAppear(animated)

  guard let shoppingItemController = shoppingItemController else { return }
  var chosenItems: [ShoppingItem] = []
  for item in shoppingItemController.shoppingItems { 
    if item.added {
      chosenItems.append(item)
    }
  }

  numberOfItemsLabel.text = "You currently have \(chosenItems.count) items(s) in your shopping list"
}

然后 ShoppingListCollectionViewController.swift

override func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
  let cell = collectionView.cellForItem(at: indexPath) as! ShoppingItemCollectionViewCell
  /* here you do just changed new declare chosenItem.added, not shoppingItemController.shoppingItems 
  var chosenItem = shoppingItemController.shoppingItems[indexPath.item]
  chosenItem.added.toggle()
  */ 
  // so you just use this to change shoppingItem's status be added
  shoppingItemController.shoppingItems[indexPath.item].added.toggle()

  cell.hasBeenAddedLabel.text = chosenItem.added ? "Added" : "Not Added"
  print(chosenItem.added)
}

旧答案未被使用,您可以将其全部删除并修改为更新的答案。

旧答案:
我想 .. 也许你只想在选择单元格时 ShoppingListDetailVC.itemsInCart 增加 1。

如果我没猜错,你可以使用变量 didSet{}

// In ShoppingListDetailViewController.swift
var itemInCart: Int = 0 { 
  didSet { 
    numberOfItemsLabel.text = "You currently have \(itemsInCart) items(s) in your shopping list"
  }
}

并且在您的 collectionViewController 上,也许您为 ShoppingListDetailViewController 声明了一个变量 这里我假设它的名字 shopListDetailVC

// when cell be selected, you add something here. 
func onSelectedAddCart() { 
   shopListDetailVC.itemsInCart += 1
}

或者你可能不需要 itemsInCart,只需将 shoppingItem 的变量替换为

var shoppingItems: [ShoppingItem] = [] { 
  didSet { 
    numberOfItemsLabel.text = "You currently have \(shoppingItems.count) items(s) in your shopping list"
  }
}

然后单元格被选中时

func onSelectedAddCart(with item: ShoppingItem) { 
   shopListDetailVC.shoppingItems.append(item)
}

最后,如果您的 ShoppingListDetailViewController 未在 collectionViewController 中声明,则尝试传递 shopListDetailVC 或使用其他方式(例如使用协议或闭包)来传递当您的项目被选中时的事件。