Как удалить выбранное состояние кнопки при нажатии? - PullRequest
0 голосов
/ 30 июня 2019

У меня есть приложение, в котором у меня есть представление коллекции категорий, и в каждой ячейке есть кнопка, изображение которой мне нужно изменить при выборе. Когда кнопка нажата, выбранный идентификатор добавляется, и когда я нажимаю кнопку галочки, я перехожу на другой экран, и он показывает мне все данные, относящиеся к этой категории. Когда я отменяю выбор категории и нажимаю кнопку, она все равно показывает мне данные этой категории, которые мне не нужны. Кто-нибудь может мне помочь с этой проблемой?

скриншот моего приложения:

screenshot for my app

Мой код, который я пробовал до сих пор:

метод cellforrow:

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
    if selectedBtnIndex == 1{
        let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "CategoryCell1", for: indexPath) as! CategoryCell1

        let dict = categoryData[indexPath.row]

        if let catName = dict.name, catName.count != 0 {
            cell.categoryName.text = catName
        }

        if let catOffersCount = dict.count {

            if catOffersCount == 1 {
              cell.catOfferCount.text = "\(catOffersCount)"+" "+"Offer"
            }else {
                cell.catOfferCount.text = "\(catOffersCount)"+" "+"Offers"
            }
        }

        cell.categoryImage.image = arrCategoryImages[indexPath.row]

        cell.btn_click.tag = indexPath.row
        cell.btn_click.addTarget(self, action: #selector(self.click_Category), for: .touchUpInside)

        if selectedIds.contains(categoryData[indexPath.row].ID!) {
            cell.btn_click.setImage(#imageLiteral(resourceName: "image_checked"), for: .normal)
            cell.btn_click.isSelected = true
        }else {
            cell.btn_click.setImage(#imageLiteral(resourceName: "image_unchecked"), for: .normal)
            cell.btn_click.isSelected = false
        }

        return cell

Кнопка добавления целевой функции:

@objc func click_Category(sender: UIButton!) {
    if sender.isSelected == true {
        selectedIds.append(categoryData[sender.tag].ID!)
        sender.setImage(#imageLiteral(resourceName: "image_checked"), for: .normal)
        sender.isSelected = false
    } else {
        selectedIds = selectedIds.filter{ $0 != sender.tag }
        sender.setImage(#imageLiteral(resourceName: "image_unchecked"), for: .normal)
        sender.isSelected = true
    }
}

1 Ответ

0 голосов
/ 01 июля 2019

Есть в основном две ошибки с опубликованным кодом. Эти логические ошибки содержатся в функции click_Category . Ошибки:

1.Переключение изображения UIButton с помощью sender.isSelected не обрабатывается должным образом. 2. Первый блок оператора if добавляет идентификаторы в массив selectedIds , но при повторном нажатии на ту же кнопку UIB, чтобы снять флажок, массив selectedIds не удаляет непроверенный идентификатор UIButtons.

Вот фрагмент кода для измененной click_Category функции:

 @objc func click_Category(sender: UIButton!) {

    sender.isSelected = !sender.isSelected
    if sender.isSelected {
        selectedIds.append(categoryData[sender.tag].ID!)
        sender.setImage(UIImage(named: "image_checked"), for: .normal)
    }else {
        selectedIds = selectedIds.filter {$0 != categoryData[sender.tag].ID!}//removing the unchecked ID
        sender.setImage(UIImage(named: "image_unchecked"), for: .normal)
    }

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