Поддерживать любимое состояние кнопки в представлении коллекции - PullRequest
0 голосов
/ 08 марта 2020

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

cell.favBtn.tag = indexPath.row
            let value = UserDefaults.standard.bool(forKey: "isSaved")
            print("value is",value)
              cell.favBtn.isSelected = value
               cell.favBtn.isSelected = false
        cell.favBtn.addTarget(self, action: #selector(favBtnAction), for: .touchUpInside)

Код функции favBtnAction выглядит следующим образом:

 @IBAction func favBtnAction(_ sender: UIButton) {

        if objcell.favBtn.isSelected {
                   // set selected

             sender.setImage(image1, for: UIControl.State.normal)
            objcell.favBtn.isSelected = false
                   UserDefaults.standard.set(true, forKey: "isSaved")
                   UserDefaults.standard.synchronize()
               } else {

                   // set deselected
                 sender.setImage(image2, for: UIControl.State.normal)
                  objcell.favBtn.isSelected = true
                   UserDefaults.standard.set(false, forKey: "isSaved")
                   UserDefaults.standard.synchronize()

               }
}

1 Ответ

0 голосов
/ 11 марта 2020
  struct Record{
    let id:Int
    //your other data
    var isFavourite:Bool

    mutating func setIsFavourite(isFavourite:Bool){
        self.isFavourite = isFavourite
    }
}

let items:[Record] = [] //Your collection view data list is here

назначить идентификатор элемента любимому тегу кнопки в cellForItemAt

@IBAction func favBtnAction(_ sender: UIButton) {

    if sender.isSelected{//<- this is how you identify the it is selected or deselected.I add dummy logic here
        items[sender.tag].setIsFavourite(isFavourite: true)
    }else{
        items[sender.tag].setIsFavourite(isFavourite: false)
    }
}

Теперь вы используете значение isFavorite для отображения различных изображений на cellForItemAt

...