Table 查看单元格选择错误
Table View Cell Selection Error
我有一个 table 视图,用户可以在其中选择朋友。我的问题是,由于某种原因,当一个单元格被选中时,另一个不相关的单元格也会被选中。谁能帮助我了解发生了什么?
这是我处理选择的代码:
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"。反之亦然。
当您 reloadData
时,您的细胞将从原型细胞中重新生成以供重复使用。如果您不添加根据 cellForRowAtIndexPath 中的数据源设置此图像的功能,图像将始终默认为原型单元格中的图像。
不需要此行,因为参数中已有 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
方法。
我有一个 table 视图,用户可以在其中选择朋友。我的问题是,由于某种原因,当一个单元格被选中时,另一个不相关的单元格也会被选中。谁能帮助我了解发生了什么?
这是我处理选择的代码:
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"。反之亦然。
当您 reloadData
时,您的细胞将从原型细胞中重新生成以供重复使用。如果您不添加根据 cellForRowAtIndexPath 中的数据源设置此图像的功能,图像将始终默认为原型单元格中的图像。
不需要此行,因为参数中已有 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
方法。