swift表视图向单元格添加自定义复选标记并从上一个单元格中删除复选标记

时间:2015-08-23 00:54:47

标签: ios swift uitableview

我的单元格中有一个图像视图,显示一个复选标记图标。

我想要做的是当您触摸单元格时,应该出现复选标记。我得到了这个工作,但我现在的问题是我无法删除上一个选定单元格的复选标记。 - 只能选择一个单元格。

我试图让这个工作在didSelectRowAtIndexPath,但我无法做到正确,所以我现在被困住了。

更新

var selectedRow: NSIndexPath?

 func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        var cell: searchCityTableViewCell!

        if (indexPath.section == 0) {
            cell = tableView.dequeueReusableCellWithIdentifier("staticCityCell") as! searchCityTableViewCell
            cell.titleLabel?.text = "Within \(stateName)"                
        }else if (indexPath.section == 1) {
            cell = tableView.dequeueReusableCellWithIdentifier("cityCell") as! searchCityTableViewCell
            let state = cities[indexPath.row]
            cell.configureWithStates(state)
            if indexPath == selectedRow {
                cell.cityImage.select()
            } else {
                cell.cityImage.deselect()
            }
        }

        return cell

    }

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath)
    {
        let paths:[NSIndexPath]

        if let previous = selectedRow {
            paths = [indexPath, previous]
        } else {
            paths = [indexPath]
        }
        selectedRow = indexPath
        tableView.reloadRowsAtIndexPaths(paths, withRowAnimation: .None)
    }

1 个答案:

答案 0 :(得分:4)

  1. 跟踪当前选择的行。向ViewController添加属性:

    var selectedRow: NSIndexPath?
    
  2. didSelectRowAtIndexPath

    let paths:[NSIndexPath]
    
    if let previous = selectedRow {
        paths = [indexPath, previous]
    } else {
        paths = [indexPath]
    }
    selectedRow = indexPath
    tableView.reloadRowsAtIndexPaths(paths, withRowAnimation: .None)
    
  3. cellForRowAtIndexPath

    if indexPath == selectedRow {
        // set checkmark image
    } else {
        // set no image
    }
    
  4. 需要注意的重要一点是,选择哪一行的状态应存储在模型中,而不是存储在单元格中。该表应反映模型的状态。在这种情况下,模型可以只是所选行的indexPath。更新模型后(设置selectedRow),受影响的行应重新加载其状态。