在这个详细 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/