如果选择了tableView中的行,则更改按钮状态

时间:2016-10-04 17:09:14

标签: ios swift xcode uitableview

当我选择一行时,我有一个tableView我希望在我没有选择行时显示底部(tableView外部)的按钮(isEnabled = true)我希望它被设置为禁用(isEnabled = false。我怎样才能做到最好?

目前我有这个逻辑但是当我尝试选择多行时,这给了我一些问题。因为第一个选择将启用它,第二个选择将禁用它。

以下是代码:

我在顶部的var中存储了一个true或false,名为: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 个答案:

答案 0 :(得分:0)

在这里,我对您的代码进行了一些小改动。看看它是否对你有所帮助。像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 {

}

答案 1 :(得分:0)

你的代码很好但是如果只选择了一个单元格它会起作用,因为你实际上正在做的是选择将Bool的值改为true,然后选择false,如果取消选择而不检查所选行的总数。

不改变大量代码的最简单方法是添加一个名为

的新变量
var rowsSelected = 0 

在你的didSelectRow中添加一个rowsSelected += 1 然后在你的if语句中检查

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

在deselectRow上执行相反的操作并从rowsSelected -= 1中减去1,然后从If语句中减去if rowsSelected == 0 { //hide the button and disable it}

我希望这会有所帮助。