UITableView при прокрутке теряет свойства, связанные с выделенными ячейками. Как сохранить эти свойства? - быстрый - PullRequest
0 голосов
/ 29 августа 2018

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

enter image description here

 class CustomHashTagPopup: UIViewController, UITableViewDelegate, UITableViewDataSource{


// CREATE TABLEVIEW CELLS
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

    let cell = self.tableViewPicker.dequeueReusableCell(withIdentifier: "pickerCell") as! PreviewTableViewCustomPickerCell

    if(indexPath == [0,0]){
        let image = UIImage.init(named: "add")
        cell.checkBoxOutlet.setBackgroundImage(image!, for: .normal)
        cell.pickerLabel.text = "Create New HashTag"
        cell.isCreateTagCell = true

    }else{
        let image = UIImage.init(named: "uncheck")
        cell.checkBoxOutlet.setBackgroundImage(image!, for: .normal)
        cell.pickerLabel.text = arrayHashTags[indexPath.row]
        cell.isCreateTagCell = false
    }
    return cell

}


 }


 class PreviewTableViewCustomPickerCell: UITableViewCell {

 var isSelect: Bool = false
var isCreateTagCell: Bool = false // TO DISTINGUISH 'CEATE NEW HASHTAG OPTION'



/*** OUTLETS ***/

@IBOutlet weak var checkBoxOutlet: UIButton!
@IBOutlet weak var pickerLabel: UILabel!


 // TAP ON CHECK BOX
@IBAction func checkBoxBtn(_ sender: Any) {


    if(isSelect == false && isCreateTagCell == false){
        isSelect = true
        // SHOW GREEN SELECTED CHECK BOX
        let image = UIImage.init(named: "tick")
        self.checkBoxOutlet.setBackgroundImage(image!, for: .normal)

    }else if(isSelect == true && isCreateTagCell == false){
        isSelect = false
        // SHOW UNCHECKED BOX
        let image = UIImage.init(named: "uncheck")
        self.checkBoxOutlet.setBackgroundImage(image!, for: .normal)
    }
}

}

1 Ответ

0 голосов
/ 29 августа 2018

То, что вам не хватает, это повторное использование ячеек, вы должны хранить каждое действие внутри массива модели, проверять текущее значение и устанавливать соответствующие настройки внутри cellForRowAt, вы можете установить делегат действий для vc для кнопки внутри cellForRowAt для упрощения доступа к массиву модели для управления им, когда пользователь нажимает эту кнопку в определенном indexPath, поэтому рассмотрите возможность объявления массива следующим образом

let arr = [false,true,false,false,false] first index is dummy as it will be skipped in Create New HashTag

//

@objc func btnClicked(_ sender:UIButton) {
   arr[sender.tag] = !arr[sender.tag]
    // reload indexPath of row = sender.tag , section = 0
}

//

Внутри cellForRowAt

if (indexPath == [0,0]) {
    let image = UIImage(named: "add")
    cell.checkBoxOutlet.setBackgroundImage(image!, for: .normal)
    cell.pickerLabel.text = "Create New HashTag"
    cell.isCreateTagCell = true

}else{
    let image = UIImage(named: arr[indexPath.row] ? "tick" : "uncheck") // edited here 
    cell.checkBoxOutlet.setBackgroundImage(image!, for: .normal)
    cell.pickerLabel.text = arrayHashTags[indexPath.row]
    cell.isCreateTagCell = false
}

cell.button.addTarget(self, action: #selector(btnClicked(_:)), for: .touchUpInside)
cell.button.tag = indexPath.row
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...