ios - 您好,我正在使用 Collection View 单元格,我想记录其中有多少被点击 "made true"并返回下一个 View Controller

标签 ios swift iphone xcode uicollectionview

在这个详细 View Controller 中,我有一个标签,它告诉您已添加到购物车中的商品数量,我想获取在我的收藏 View Controller 中单击的商品数量,并将该值返回到详细 View Controller 上的标签中。在我的 Collection View Controller 中,单击 Collection View 单元格并更改其相应的 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 会增加一。

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

关于ios - 您好,我正在使用 Collection View 单元格,我想记录其中有多少被点击 "made true"并返回下一个 View Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62013846/

相关文章:

ios - 调用completeTransition后调整导航栏 : in custom transition

iphone UIImagePicker Controller 无法解码消息

ios - 如何在完成数据获取后在 tableView 中使用 UIActivityIndi​​catorView

iphone - 执行select语句时发生未知错误

ios - SKLableNode - 使用图像作为颜色模式

ios - 如何比较两个在 iOS 中具有几乎相同阴影或范围的 UIColor?

iphone - 登录谷歌下载文件 - ios

iphone - 创建 uibutton 子类

ios - 当应用程序处于后台且手机处于振动状态时,某些警报应用程序(例如 Alarmy)如何能够在 iPhone 上播放声音

xcode - 无法打开可执行文件 Library/Developer/Xcode/DerivedData/myAppTests.xctest/MyApp For AppTests' : No such file or directory