在tableview选择多个对象

时间:2015-09-01 13:47:35

标签: ios swift uitableview

我正在使用表格视图来选择对象。我想在tableview中选择多个对象。我使用以下代码:

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    let cell: ContactCell = tableView.dequeueReusableCellWithIdentifier(textCellIdentifier) as! ContactCell

    let row = indexPath.row
    let person=contacts[row]
    cell.setCell(person.nameLabel,image: "")
    return cell
}


func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
    let row = indexPath.row
    let person=contacts[row]

    if let cell = tableView.cellForRowAtIndexPath(indexPath) {
        if cell.accessoryType == .Checkmark
        {
            cell.accessoryType = .None
        }
        else
        {
            cell.accessoryType = .Checkmark
        }
    }
    tableView.deselectRowAtIndexPath(indexPath, animated: true)
}

我的tableview看起来像这样:

enter image description here

我选择了“Kate”然后我向下滚动到底部并且“Test”也被标记了。但为什么?我只选择了“凯特”。我该如何防止这种情况?

2 个答案:

答案 0 :(得分:1)

它被选中"",因为在UITableView单元格中重复使用...

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="@color/myWindowBackground"
    tools:context="com.example.activities.SearchActiviKty"
    android:orientation="vertical">

<include
    android:id="@+id/toolbar_actionbar"
    layout="@layout/toolbar_default"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"/>

<View
    android:id="@+id/anchor_dropdown"
    android:layout_width="fill_parent"
    android:layout_height="16dp"/>

</LinearLayout>

如果你想解决这个问题,最好的方法是在数组中保存每个单元格状态,这是保存UITableView的数据......这是最好的方法。

另一种方法是声明类型为[Int:Bool]的Dictionary并将所选状态保存到此... Int键将是行索引,其值对于selected可能为true,否则为false ...

<强>更新

关于如何解决问题的示例

let cell: ContactCell = tableView.dequeueReusableCellWithIdentifier(textCellIdentifier) as! ContactCell

答案 1 :(得分:0)

您会看到此效果,因为单元格已缓存并重复使用。请注意dequeueReusableCellWithIdentifier中的“可重复使用”一词。

使“选中”成为联系人或个人的财产。选择或取消选择行时,将其设置为true或false。重新加载您的数据并在cellForRowAtIndexPath

中设置配件类型