表视图复选框不接受索引0

时间:2017-10-09 08:27:46

标签: ios swift uitableview

我有一个表视图,其中包含带复选框的项目。用户可以选择任何项目(也可以选择多项选择),他们可以按Proceed按钮进行支付。

我使用了一个按钮作为复选框。因此,如果用户按下按钮,或者他们选择了一个表行,则两个案例都会处理该函数。

所以现在,我的继续按钮开始为禁用。每当用户使用didSelectRowAt方法或复选框按钮操作按任何项目时,只有启用了Proceed按钮。

但是现在,每当我按下第一个项目或第一个复选框按钮时,我的继续按钮都没有启用。如果我按第二个项目或第二个复选框,它可以工作。我不知道为什么。

以下是我的didSelectRowAt代码和我的复选框按钮操作代码:

#Updated:

 var selectedIndexPathArray = Array<NSIndexPath>()

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

        let cell = tableView.dequeueReusableCell(withIdentifier: "itemcell", for: indexPath) as! itemTableViewCell


        cell.checkboxBtn.isUserInteractionEnabled = false

        if selectedIndexPathArray.contains(indexPath as NSIndexPath) {
            cell.checkboxBtn.setImage(UIImage(named: "enabled"), for: .normal)
            proceedbutton.isUserInteractionEnabled = true


        } else {
            cell.checkboxBtn.setImage(UIImage(named: "disabled"), for: .normal)
            proceedbutton.isUserInteractionEnabled = false

        }
        return cell
    }



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

        if selectedIndexPathArray.contains(indexPath as NSIndexPath) {

             let index = selectedIndexPathArray.index(of: indexPath as NSIndexPath)
            selectedIndexPathArray.remove(at: index!)
        } else {
            selectedIndexPathArray.append(indexPath as NSIndexPath)
        }
        tableView.reloadData()
    }

提前致谢!

3 个答案:

答案 0 :(得分:0)

是的,因为如果您第一次点击按钮,则会调用proceedbutton,此时selectedIndexPathArray将没有任何值意味着无。

首次执行 else 部分。

.
.
.
 else {    
           selectedIndexPathArray.append(indexPath! as NSIndexPath)
           cell?.checkboxBtn.setImage(UIImage(named: "disabled"), for: .normal)
           proceedbutton.isUserInteractionEnabled = false

      }

当你按下agin然后你的 if 条件为真,那么启用

答案 1 :(得分:0)

在您的proceed()函数的if-else条件上尝试此操作。

    if selectedIndexPathArray.contains(indexPath! as NSIndexPath) {
        electedIndexPathArray.remove(at: index!)
        cell?.checkboxBtn.setImage(UIImage(named: "disabled"), for: .normal)
        proceedbutton.isUserInteractionEnabled = false
    }
    else {

        selectedIndexPathArray.append(at: index!)
        cell?.checkboxBtn.setImage(UIImage(named: "enabled"), for: .normal)
        proceedbutton.isUserInteractionEnabled = true
    }

答案 2 :(得分:0)

删除单元格中按钮的选择器,按钮的默认设置userInteraction为false。不需要每次都设置它。在didSelectRow上执行所有操作。

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

        let cell = tableView.dequeueReusableCell(withIdentifier: itemscell, for: indexPath) as! itemsTableViewCell

     cell?.checkboxBtn.isUserInteractionEnabled = false

        if selectedIndexArray.contains(indexPath.row) {
            cell.checkboxBtn.setImage(UIImage(named: "enabled"), for: .normal)
            proceedbutton.isUserInteractionEnabled = true

        } else {
            cell.checkboxBtn.setImage(UIImage(named: "disabled"), for: .normal)
            proceedbutton.isUserInteractionEnabled = false

        }
        return cell
    }

    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        if selectedIndexArray.contains(indexPath.row) {
            let index = selectedIndexPathArray.index(of: indexPath.row)
            selectedIndexArray.remove(at: index!)
        } else {
            selectedIndexArray.append(indexPath.row)
        }
        tableView.reloadData()
    }