多选在IOS中无法正常工作

时间:2016-10-26 06:47:18

标签: ios swift uitableview swift2 nsnotificationcenter

我在iOS表格视图中设置行的复选标记时遇到问题 如果我选择上面的一个元素,下一个第13个元素也会被选中,我不知道为什么?

在设置复选标记之前,我是否必须对表执行某些操作,因为我只是检查一个条件,如果该条件为真,我将accessoryType设置为复选标记,下面是代码。

注意: - 当发生这种情况时,第13行将不会被选中,它只会更改该行的附件类型。

if let cell = tableView.cellForRowAtIndexPath(indexPath) {
                if cell.selected {
                    if(self.sections[indexPath.section].files[indexPath.row].type != "cloud"){
                        print(self.sections[indexPath.section].files[indexPath.row])
                        cell.accessoryType = .Checkmark
                        NSNotificationCenter.defaultCenter().postNotificationName("enableOptions", object: nil)
                    }
                }
            }

CellForIndexPath代码:

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCellWithIdentifier(cellIdentifier, forIndexPath: indexPath) as! MyFilesTableViewCell

        let fileSection = sections[indexPath.section]
        let file = fileSection.files[indexPath.row]

        cell.title.text = file.name
        if file.timeStamp.isEmpty{
            cell.timeStamp.hidden = true
        }else{
            cell.timeStamp.hidden = false
            cell.timeStamp.text = file.timeStamp
        }
        cell.icon.image = file.icon
        cell.actionsBtn.row = indexPath.row
        cell.actionsBtn.section = indexPath.section
        cell.actionsBtn.setTitle("\u{f142}", forState: .Normal)
        cell.actionsBtn.addTarget(self, action: #selector(MyFilesTableViewController.buttonClicked(_:)), forControlEvents: UIControlEvents.TouchUpInside)
        if(editingTable){
            cell.actionsBtn.hidden = true
        }else{
            cell.actionsBtn.hidden = false
        }
        if(file.type == "cloud"){
            cell.actionsBtn.hidden = true
        }
        cell.progressBar.progress = 0.0
        cell.progressBar.hidden = true
        return cell
    }

2 个答案:

答案 0 :(得分:1)

您的单元格在cellForRowAtIndexPath中可重用的问题。请使用以下代码。

0.0.0

答案 1 :(得分:0)

通过使用此方法,您可以省略整个tableView reload并仅修改所选的单元格内容。

创建一个存储所选单元格行信息的数组

myArray:[Int] = []

cellForRowAtIndexPath方法集

cell.actionsBtn.tag = indexPath.row 
myArray.insert(1, at: indexPath.row)

而不是

cell.actionsBtn.row = indexPath.row`

buttonClicked(_:)方法中使用

 func buttonClicked( sender: AnyObject)
{

    let indexPath = IndexPath(row: sender.tag, section: 0)
    let cell = tableView.cellForRow(at: indexPath) as! MyFilesTableViewCell
    if myArray[sender.tag] == 1
    {
        cell.actionsBtn.setImage(UIImage(named:"checkmark_box"), for: .normal)
        myArray[sender.tag] = 0
    }
    else
    {
        cell.actionsBtn.setImage(UIImage(named:"tick_mark"), for: .normal)
        myArray[sender.tag] = 1
    }
}