我正在使用表格视图来选择对象。我想在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看起来像这样:
我选择了“Kate”然后我向下滚动到底部并且“Test”也被标记了。但为什么?我只选择了“凯特”。我该如何防止这种情况?
答案 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
。