Чек в tableView

swift4
ios

#1

Добрый день!!!


сразу то что есть,
суть, по нажатию ставится чек и появляется алерт с вводом данных, ввожу, и передаю,

как сделать так, чтобы если чек активен, то данные которые ввел считываются, если же чек я решил убрать и он стал false, то и данные которые ввел - не читались бы(не использовались, обнулялись значения переменных)


#2

Может сделать по типу такого:
Вообще работать будет, только тут идея!, не бери прям код)

Создаешь массив структур, равный количество элементов в твоей TV, и соотвественно в didSelected меняешь статус на противоположный, а по окончанию работы просто фильтруешь свой массив dataSource.fiter{$0.isActive}

Примерно так можешь реализовать

struct CellData {
        let yorCellData: YorCellData
        var check: Check
        var isActive: Bool
    }
    
    let dataSource = [CellData]()

Либо как вариант можешь в классе ячейки хранить модель чека и флаг, который будет говорить о состоянии, по сути даже чек-бокс будет у тебя флагом) вариантов много!


#3

у меня пока вот так

 func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        if let cell = tableView.cellForRow(at: indexPath) as? CheckMarkCell  {
            if cell.btnCheckMark.isSelected {
                //снять
                cell.btnCheckMark.isSelected = false
            } else {
                // поставить
                cell.btnCheckMark.isSelected = true
                indexAlert(index: indexPath.row)
            }
        }
    }

#4

У тебя модели данных отличаются у чеков?


#5
import UIKit

class CheckMarkCell: UITableViewCell {
    var actionHandler: ((CheckMarkCell) -> Void)?
    @IBAction func Click(_ sender: UIButton) {
    
   
        if sender.isSelected {
            sender.isSelected = false
        } else {
            sender.isSelected = true
        
        actionHandler?(self)
    }
    }
    @IBOutlet weak var lblTitle: UILabel!
    
    @IBOutlet weak var btnCheckMark: UIButton!
    
    override func awakeFromNib() {
        super.awakeFromNib()
        // Initialization code
    }

    override func setSelected(_ selected: Bool, animated: Bool) {
        super.setSelected(selected, animated: animated)

        // Configure the view for the selected state
    }
    
}

это чеки


#6

Это класс ячейки, что у тебя в самом чеке содержится, иначе я не понимаю задачу.
У тебя должен быть dataSource из которого ты берешь данные для ячеек, так?


#7
 perehodObrabotki.append("работа сдана заказчику")
        perehodObrabotki.append("смена мастер кода")
        perehodObrabotki.append("получил деньги от заказчика")
        perehodObrabotki.append("списание/пересорт")
        perehodObrabotki.append("результат диагностики")
        perehodObrabotki.append("обработать заявку вручную")
        obrabotkaList.register(UINib.init(nibName: "CheckMarkCell", bundle: nil), forCellReuseIdentifier: "Cell")//"CheckListIdentifier")
        obrabotkaList.dataSource = self
        obrabotkaList.delegate = self

#8

О каких данных идет речь?
В общем, чтобы отследить активные ячейки просто добавь поле var isSelected = false,
а в didSelected cell.isSelected = !cell.isSelected

при завершении можешь сделать релоад Data и определить где isSelected true

я не понимаю твоей задачи и о каких данных идет речь


#9
   func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        if let cell = tableView.cellForRow(at: indexPath) as? CheckMarkCell  {
            if cell.btnCheckMark.isSelected {
                //снять
                cell.btnCheckMark.isSelected = false
            } else {
                // поставить
                cell.btnCheckMark.isSelected = true
                indexAlert(index: indexPath.row)
            }
        }
    }

вот вызываю фукцию indexAlert(index: indexPath.row)

func indexAlert(index:Int) {
        switch index {
        case 0:
            
          rabotaSdanaZak = "1"
        case 1:
            let alert = UIAlertController(title: "Введите Мастер - Код", message: nil, preferredStyle: .alert)
            alert.addTextField(configurationHandler: { textField in
                textField.placeholder = "Введите данные"
                 textField.keyboardType = .numberPad
            })
            
            alert.addAction(UIAlertAction(title: "OK", style: .default, handler: { action in
                if let text = alert.textFields?.first?.text , text != "" {
                self.smenaMasterText = text
                }
               
            }))
           self.present(alert, animated: true)

итд
вот появляются алерты по нажатию и я ввожу туда данные, нажал в алерте ОК, он закрылся, переменная получила данные, чек true,
но если нажать еще раз на ячейку, чек уйдет, но данные как были присвоены таки останутся и передадутся далее, а нужно их передавать при условии что чек false