Здравствуйте, я использую ячейку представления коллекции, и я хочу записать, сколько из них щелкнули, чтобы «стало истинным» и вернулись на следующий контроллер представления - PullRequest
1 голос
/ 26 мая 2020

В этом контроллере детального представления у меня есть метка, которая сообщает вам, сколько элементов вы добавили в корзину, я хочу взять количество элементов, на которые щелкнули в моем контроллере представления коллекции, и вернуть это значение в мою метку на детали просмотр контроллера. В моем контроллере представления коллекции щелкаются ячейки представления коллекции и изменяется их соответствующее значение 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"
        }
    }
}

1 Ответ

1 голос
/ 26 мая 2020

update: Хорошо, вы просто замените в функции 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)
}

И старый ответ не использовался, вы можете удалить его все и измените его на обновленный ответ.

старый ответ:
Я думаю ... возможно, вы просто хотите, чтобы при выборе ячейки значение ShoppingListDetailV C .itemsInCart увеличилось на единицу.

Если я не ошибаюсь, вы можете использовать переменную didSet {}

// In ShoppingListDetailViewController.swift
var itemInCart: Int = 0 { 
  didSet { 
    numberOfItemsLabel.text = "You currently have \(itemsInCart) items(s) in your shopping list"
  }
}

А в своей коллекцииViewController, возможно, вы объявили переменную для 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)
}

Final , если ваш ShoppingListDetailViewController не был объявлен в collectionViewController, попробуйте передать shopListDetailV C или используйте другой способ (например, используйте протокол или закрытие), чтобы передать события, которые при выборе вашего элемента.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...