Ошибка выбора ячейки табличного представления
У меня есть вид таблицы, где пользователь выбирает друзей. Моя проблема в том, что по какой-то причине, когда выбирается одна ячейка, выбирается и другая не связанная ячейка. Может ли кто-нибудь помочь мне понять, что происходит?
Вот мой код для обработки выбора:
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". и наоборот.
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
метод.
Когда ты reloadData
Ваши клетки регенерируются из клетки-прототипа для повторного использования. Если вы не добавите функциональность для установки этого изображения в соответствии с вашим источником данных в cellForRowAtIndexPath, изображение всегда будет по умолчанию равным тому, которое находится в вашей ячейке прототипа.