Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 您好,我正在使用集合视图单元格,我想记录其中有多少个被单击;“变为现实”;然后返回下一个视图控制器_Ios_Swift_Iphone_Xcode_Uicollectionview - Fatal编程技术网

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
的超级用户,以及您是如何显示它的。非常感谢您,这创造了奇迹!现在我必须尝试使用基本的持久性来保存它。它很棒。让我们享受斯威夫特!