【问题标题】:Change button state if a row in tableView is selected如果选择了 tableView 中的一行,则更改按钮状态
【发布时间】:2016-10-04 17:09:14
【问题描述】:

当我选择一行时我有一个 tableView 我想在底部(tableView 之外)显示一个按钮,当我没有选择行时我希望它被设置为禁用(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
        }
    }

我很好奇是否有人可以帮助我。

谢谢! :)

【问题讨论】:

    标签: ios swift xcode uitableview


    【解决方案1】:

    您的代码很好,但是如果只选择一个单元格,它将起作用,因为您实际上所做的是将 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}

    我希望这会有所帮助。

    【讨论】:

    • 太棒了!这很简单,就像一个魅力。正是我想要的。非常感谢您提供此解决方案。 :D
    • 您知道如何从 UITabelCell 中检索数据并将其放入变量中,以便将其发送到我的 firebase 数据库吗?
    • 我很高兴能帮上忙……如果您能详细说明一下您要完成的工作,我会很乐意为您提供帮助
    • 确定你的 github 账号是什么?
    • 对不起,我没有
    【解决方案2】:

    在这里,我对您的代码进行了一些小改动。看看对你有没有帮助。在顶部创建一个变量,如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 {
    
    }
    

    【讨论】:

    • 它无法识别 indexPath。使用未解析的标识符 indexPath
    猜你喜欢
    • 2015-09-23
    • 1970-01-01
    • 1970-01-01
    • 2023-03-14
    • 2017-09-02
    • 1970-01-01
    • 1970-01-01
    • 2020-05-29
    • 1970-01-01
    相关资源
    最近更新 更多