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

Здесь мой контроллер представления коллекции, и когда я нажимаю на ячейку представления коллекции, он обновляется между истинным и ложным, но моя метка не обновляется с добавленного на не добавленное. любая помощь будет принята с благодарностью, я был в этом в течение 4 дней. Я пробовал читать документацию Apple, и в ней нет примеров того, как выполнить sh это с использованием логического значения. Я хочу, чтобы метка поверх моей метки ячейки представления коллекции изменилась с добавленной на не добавленную при нажатии ячейки представления коллекции. Я знаю, что он работает, потому что, когда я тестировал его с помощью операторов печати, когда я нажимаю на ячейку представления коллекции, он меняется туда и обратно с true на false. У меня просто возникли проблемы с изменением метки с добавленной на не добавленную.


import UIKit


class ShoppingListCollectionViewController: UICollectionViewController {

    var shoppingItemController = ShoppingItemController()

    var shoppingItemCollectionViewCell = ShoppingItemCollectionViewCell()
    override func viewDidLoad() {
        super.viewDidLoad()
        shoppingItemCollectionViewCell.updateViews()


    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {

        if segue.identifier == "ShoppingListDetailSegue" {

          guard let shoppingListDetailVC = segue.destination as? ShoppingListDetailViewController else {
                return 
            }

        }

        // Get the new view controller using [segue destinationViewController].
        // Pass the selected object to the new view controller.
    }


    // MARK: UICollectionViewDataSource

    override func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
        // #warning Incomplete implementation, return the number of items
        return shoppingItemController.shoppingItems.count
    }

    override func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
        guard let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "ShoppingItemCell", for: indexPath) as? ShoppingItemCollectionViewCell else {
            fatalError("Collection view cell identifier is wrong or the cell is not a ShoppingItemCollectionViewCell")
        }

        // Configure the cell
        let shoppingListItem = shoppingItemController.shoppingItems[indexPath.item]
        cell.imageView.image = shoppingListItem.image
        cell.shoppingItemLabel.text = shoppingListItem.imageName
        if shoppingListItem.added == true {
            cell.hasBeenAddedLabel.text = "Added"
        } else {
            cell.hasBeenAddedLabel.text = "Not Added"
        }
        return cell
    }

    // MARK: UICollectionViewDelegate

    override func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
        var chosenItem = shoppingItemController.shoppingItems[indexPath.item]
        chosenItem.added = !chosenItem.added
        shoppingItemController.shoppingItems[indexPath.item] = chosenItem
        if chosenItem.added == true {
            chosenItem.updateViews()
        }


        print(chosenItem.added)
    }





1 Ответ

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

Вам нужно только получить ячейку из метода cellForItem(at:) внутри метода didSelectItemAt и обновить текст метки до нужной строки:

override func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
    let cell = collectionView.cellForItem(at: indexPath) as! ShoppingItemCollectionViewCell
    var chosenItem = shoppingItemController.shoppingItems[indexPath.item]
    chosenItem.added.toggle()
    cell.label.text = chosenItem.added ? "Added" : "Not Added"
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...