簡體   English   中英

單擊時如何刪除按鈕的選定狀態?

[英]How do I remove button selected state when clicked?

我有一個應用程序,其中有類別集合視圖,並且在每個單元格中都有一個按鈕,選擇該按鈕后需要更改其圖像。 單擊該按鈕時,將附加選定的ID,當我按下對勾按鈕時,我轉到另一個屏幕,它向我顯示與該類別有關的所有數據。 當我取消選擇類別並按下按鈕時,它仍然顯示我不需要的該類別的數據。 誰能幫助我解決這個問題?

我的應用的屏幕截圖:

我的應用程序的屏幕截圖

到目前為止,我嘗試過的代碼是:

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
    }
}

發布的代碼主要存在兩個錯誤。 這些邏輯錯誤位於click_Category函數中。 錯誤是:

1.未正確處理使用sender.isSelected切換UIButton圖像。 2.“ if”語句的第一塊將ID附加在selectedIds數組中,但是當再次點擊同一UIButton取消選中它時, selectedIds數組不會刪除未選中的UIButtons ID。

以下是修改后的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)
    }

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM