Ios 您好,我正在使用集合视图单元格,我想记录其中有多少个被单击;“变为现实”;然后返回下一个视图控制器
在此详细视图控制器中,我有一个标签,告诉您已将多少项添加到购物车中,我希望获取在我的集合视图控制器中单击的项数,并将该值返回到详细视图控制器上的标签中。在我的集合视图控制器中,单击集合视图单元格并更改其相应的布尔值,然后我希望仅对已更改的单元格进行计数,并使用字符串插值传递,以更新为购物车选择的项目数Ios 您好,我正在使用集合视图单元格,我想记录其中有多少个被单击;“变为现实”;然后返回下一个视图控制器,ios,swift,iphone,xcode,uicollectionview,Ios,Swift,Iphone,Xcode,Uicollectionview,在此详细视图控制器中,我有一个标签,告诉您已将多少项添加到购物车中,我希望获取在我的集合视图控制器中单击的项数,并将该值返回到详细视图控制器上的标签中。在我的集合视图控制器中,单击集合视图单元格并更改其相应的布尔值,然后我希望仅对已更改的单元格进行计数,并使用字符串插值传递,以更新为购物车选择的项目数 import UIKit class ShoppingListDetailViewController: UIViewController { var shoppingItemCon
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.viewwillbeen(:)
函数中替换即可
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中声明,则尝试传递ShoppingListDetailVC或使用其他方式(例如,使用协议或闭包)来传递选择项目时发生的事件 这是三种不同的解决方案吗?很抱歉,我学习swift才3周,我认为我不了解解决方案,在我创建此函数后,假设我将其放置在正确的位置,我将其称为何处?到目前为止,它仍然说所有的物品都在车里,也许你们可以告诉我你们当选后做了什么。我需要更多信息来了解您的collectionViewController,谁是ShoppingListViewController
的超级用户,以及您是如何显示它的。非常感谢您,这创造了奇迹!现在我必须尝试使用基本的持久性来保存它。它很棒。让我们享受斯威夫特!