allowMultipleSelection在Swift中不起作用?

时间:2014-12-19 06:11:39

标签: uitableview swift ios8 multipleselection

我非常沮丧,因为它浪费了我很多时间。 我不知道为什么allowMultipleSelection在我的TableView中不起作用? 为了让它发挥作用,必须做些什么,我做了但仍然没有结果。 请查看我的代码,并请让我知道这个问题。

override func viewDidLoad()
    {
        super.viewDidLoad()

        // Do any additional setup after loading the view.

        self.participantsTableView.allowsMultipleSelection = true
}

if tableView == participantsTableView
        {
            var cell = tableView.cellForRowAtIndexPath(indexPath)!

            if cell.accessoryType == UITableViewCellAccessoryType.Checkmark
            {
                cell.accessoryType = UITableViewCellAccessoryType.None
            }

            else
            {
                cell.accessoryType == UITableViewCellAccessoryType.Checkmark
            }

            self.participantsTableView.reloadData()
        }

1 个答案:

答案 0 :(得分:2)

您需要在tableView:didDeselectRowAtIndexPath:中实现委托方法tableView:cellForRowAtIndexPath:并更新单元格的accessoryType。

像这样:

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
    if let cell = tableView.cellForRowAtIndexPath(indexPath) {
        cell.accessoryType = .Checkmark
    }
}

func tableView(tableView: UITableView, didDeselectRowAtIndexPath indexPath: NSIndexPath) {
    if let cell = tableView.cellForRowAtIndexPath(indexPath) {
        cell.accessoryType = .None
    }
}

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCellWithIdentifier("cellId", forIndexPath: indexPath) as UITableViewCell
    cell.textLabel?.text = String(indexPath.row)

    if let selectedPaths = tableView.indexPathsForSelectedRows() as? [NSIndexPath] {
        let selected = selectedPaths.filter(){ $0 == indexPath }
        if selected.count > 0 {
            cell.accessoryType = .Checkmark
        } else {
            cell.accessoryType = .None
        }
    }
    return cell
}