您好,我正在使用 Collection View 单元格,我想记录其中有多少被单击“变为真”并返回下一个视图控制器

Posted

技术标签:

【中文标题】您好,我正在使用 Collection View 单元格,我想记录其中有多少被单击“变为真”并返回下一个视图控制器【英文标题】: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 【发布时间】:2020-05-26 02:49:21 【问题描述】:

在这个细节视图控制器中,我有一个标签,告诉你有多少物品添加到购物车中视图控制器。在我的集合视图控制器中,单击集合视图单元格并更改其相应的布尔值,然后我希望只计算已更改的单元格并使用字符串插值传递以更新为购物车选择的项目数。

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"
        
    


【问题讨论】:

【参考方案1】:

更新: 好的,你只需在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将增加一个。

如果我没猜错,你可以使用变量 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 或使用其他方式(例如使用协议或闭包)来传递您的商品被选中时的事件。

【讨论】:

这是三种不同的解决方案吗?很抱歉,我只学习了 3 周的 swift 并且我认为我不理解解决方案,在我创建这个函数之后假设我把它放在我应该调用它的正确位置?到目前为止,它仍然说所有物品都在购物车中 也许你可以告诉我当单元格被选中时你做了什么。我需要更多信息来了解你的collectionViewController,谁是ShoppingListViewController 的超级用户,你是如何展示它的。 github.com/RichGibbs-prog/ios-sprint-challenge-shopping-list 非常感谢这创造了奇迹!现在我必须尝试使用​​基本持久性来保存它。 太棒了。让我们享受 Swift!

以上是关于您好,我正在使用 Collection View 单元格,我想记录其中有多少被单击“变为真”并返回下一个视图控制器的主要内容,如果未能解决你的问题,请参考以下文章

使用 scrollViewDidScroll 处理多个 Collection View Cells

Collection View 基于图像的动态高度

启用collectionview分页时将collection view滚动到索引

如何在 iOS 中避免/禁用 Collection View 的垂直滚动

什么定义了 UITableViewCell 中 Collection View Cell 的大小?

Xamarin Forms Collection View Extra Padding