Изменить состояние кнопки, если выбрана строка в tableView

У меня есть tableView, когда строка выбрана я хотел бы показать кнопку на дне (вне tableView), чтобы показать (isEnabled = true), когда у меня нет строк, выбранных я хочу, чтобы он был установлен в отключено (isEnabled = false. Как я могу справиться с этим лучше всего?

В настоящее время у меня есть эта логика, но когда я пытаюсь выбрать несколько строк, это дает мне проблемы. Потому что первый select включит его, а второй отключит его.

Вот код:

Я храню true или false в var на вершине под названием: var someRowSelected = false

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {

        let selectedCell = tableView.cellForRow(at: indexPath)
        selectedCell?.contentView.backgroundColor = UIColor(red: 84.0 / 255, green: 199.0 / 255, blue: 252.0 / 255, alpha: 1)


        if(!someRowSelected){
            self.someRowSelected = true
            nextBtn.isEnabled = true
            nextBtn.backgroundColor = UIColor(red: 84.0 / 255, green: 199.0 / 255, blue: 252.0 / 255, alpha: 1)
        }else{
            self.someRowSelected = false
            nextBtn.isEnabled = false
            nextBtn.backgroundColor = UIColor.darkGray
        }

    }

    func tableView(_ tableView: UITableView, didDeselectRowAt indexPath: IndexPath) {
        let selectedCell = tableView.cellForRow(at: indexPath)
        selectedCell?.textLabel?.textColor = UIColor.darkGray

        if(!someRowSelected){
            self.someRowSelected = true
            nextBtn.isEnabled = true
            nextBtn.backgroundColor = UIColor(red: 84.0 / 255, green: 199.0 / 255, blue: 252.0 / 255, alpha: 1)
        }else{
            self.someRowSelected = false
            nextBtn.isEnabled = false
            nextBtn.backgroundColor = UIColor.darkGray
        }
    }

Мне интересно, может ли кто-то помочь мне.

Спасибо! 🙂

2 ответа

  1. Здесь я внес небольшое изменение в ваш код. Посмотрим, поможет ли это вам. Создайте переменную в верхней части как someRowSelected

    var indexPAthSelected : NSIndexPath?
    
    if !someRowSelected {
        self.someRowSelected = true
        nextBtn.isEnabled = true
        nextBtn.backgroundColor = UIColor(red: 84.0 / 255, green: 199.0 / 255, blue: 252.0 / 255, alpha: 1)
        indexPAthSelected = indexPath
    } else if indexPAthSelected == indexPath {
        self.someRowSelected = false
        nextBtn.isEnabled = false
        nextBtn.backgroundColor = UIColor.darkGray
    } else {
    
    }
    
  2. Ваш код хорош, однако он будет работать, если выбрана только одна ячейка, потому что то, что вы по существу делаете, изменяет значение Bool на true, а затем false, если снято без проверки общего количества выбранных строк.

    Самый простой способ без изменения большого количества кода-добавить новую переменную под названием

    var rowsSelected = 0 
    

    И в вашем didSelectRow добавить один rowsSelected += 1
    Затем в вашей инструкции if проверьте, если значение

    If rowsSelected is >= 1 { 
    //enable and un hide your button
    }
    

    На deselectRow сделайте противоположное и вычесть 1 Из rowsSelected -= 1то оператор If if rowsSelected == 0 { //hide the button and disable it}

    Надеюсь, это поможет.