在UItableView处理多个选定的行

时间:2015-12-27 08:55:44

标签: ios swift uitableview

我正在尝试获取所有选定行的textLabels,但我不知道如何搜索它但没有得到任何帮助,所以我尝试了自己的东西,但它没有工作我希望它是,我想创建一个数组并排序所选单元格的textLabel将适用它(是的它工作正常),但当取消选择一个单元格我想从我的数组中删除该特定单元格的textLabel,如果有人知道如何那样做请告诉我

这是我的代码 -

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath){

    let cell = tableView.cellForRowAtIndexPath(indexPath)

    if (cell?.accessoryType == UITableViewCellAccessoryType.Checkmark){

        cell!.accessoryType = UITableViewCellAccessoryType.None;
        getTheChannelNames.removeAtIndex(getTheChannelNames.count - 1)



        print(getTheChannelNames.count)
           print(getTheChannelNames)



    }else{
        cell!.accessoryType = UITableViewCellAccessoryType.Checkmark;
        _ = self.ChannelList[indexPath.row]

        if (cell?.accessoryType == UITableViewCellAccessoryType.Checkmark){


                getTheChannelNames.append((cell?.textLabel?.text)!)
            print(getTheChannelNames.count)
               print(getTheChannelNames)
        }


    }
}

1 个答案:

答案 0 :(得分:0)

有几种方法可以解决这个问题。首先,跟踪所选文本标签的indexPath非常重要。通过这样做,你可以避免排序。字典更适合此任务。

var selectedTextLabels = [NSIndexPath: String]()

override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
    let cell = tableView.cellForRowAtIndexPath(indexPath)!
    cell.accessoryType = .Checkmark
    if let text = cell.textLabel?.text {
        selectedTextLabels[indexPath] = text
    }
}

override func tableView(tableView: UITableView, didDeselectRowAtIndexPath indexPath: NSIndexPath) {
    let cell = tableView.cellForRowAtIndexPath(indexPath)!
    cell.accessoryType = .None
    selectedTextLabels[indexPath] = nil
}

如果选择了单元格,则会将文本标签添加到字典中。相反,当它被取消选择时,它将从字典中删除。

第二种解决方案是返回所有选定文本标签的方法:

func selectedTextLabels() -> [String]? {
    return self.tableView.indexPathsForSelectedRows?.flatMap {
        let cell = tableView.cellForRowAtIndexPath($0)!
        return cell.textLabel?.text
    }
}

它采用所有选定的索引路径并获取每个索引路径的文本标签。