1

我有一个表格视图,用户可以在其中选择朋友。我的问题是,由于某种原因,当一个单元格被选中时,另一个不相关的单元格也被选中。谁能帮我理解发生了什么?

这是我处理选择的代码:

 override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
     let indexPath = tableView.indexPathForSelectedRow
     let currentCell = tableView.cellForRowAtIndexPath(indexPath!) as! SpotFriendsCell
     let Friend = currentCell.AddFriendLabel.text
     if self.invitedFriends.containsObject(Friend!) {
         invitedFriends.removeObject(Friend!)
         currentCell.Invited.image = UIImage(named: "unckecked.png")
         tableView.reloadData()
     } else {
         invitedFriends.addObject(Friend!)
         NSUserDefaults.standardUserDefaults().setObject("Yes", forKey: "selectedFriends")
         currentCell.Invited.image = UIImage(named: "checked.png")
         tableView.reloadData()
     }
}

UIImageView在单元格的右侧有一个用于跟踪哪些朋友被选中和哪些没有被选中的单元格。如果单元格图像是“unchecked.png”,则添加朋友并将图像更改为“checked.png”。反之亦然。

4

2 回答 2

2

不需要此行,因为您已经在参数中有 indexPath。

let indexPath = tableView.indexPathForSelectedRow

然后,与其直接玩单元格,不如玩对象。我的猜测是你已经有一个包含Friend某处的列表,你应该Friend从那里选择索引获取参考。

let selectedFriend = self.allFriends[indexPath.row]

然后你可以保持你的逻辑简单。

if self.invitedFriends.containsObject(selectedFriend) {
     invitedFriends.removeObject(selectedFriend)
     } else {
         invitedFriends.addObject(selectedFriend)
         NSUserDefaults.standardUserDefaults().setObject("Yes", forKey: "selectedFriends")
     }

    tableView.reloadData()
}

然后,您的图像逻辑应该简单地进入您的cellForRowAtIndexPath方法。

于 2015-11-25T20:48:50.410 回答
1

当您 时reloadData,您的单元格会从原型单元格重新生成以重复使用。如果您没有根据 cellForRowAtIndexPath 中的数据源添加设置此图像的功能,则图像将始终默认为原型单元格中的图像。

于 2015-11-25T20:44:28.053 回答