Честно говоря, не имеет значения, почему это не работает, потому что весь подход должен быть другим.
Вместо непосредственной попытки манипулирования ячейкой, что может быть проблематичным c для лота причин (основной из которых является повторное использование ячейки), измените модель (как вы уже do) и refre sh tableView - или, что еще лучше, refre sh только затронутой ячейки.
Таким образом, ваш код будет выглядеть примерно так (обратите внимание, что у меня нет возможности проверить это, поэтому от макушки головы, но идея родов верна):
1. Внесите изменения в модель
2. Отражение это изменение в вашем представлении (ячейке)
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
tableView.deselectRow(at: indexPath, animated: true)
guard let cell = tableView.cellForRow(at: indexPath) as? ResolvedIssueTableViewCell else {
print("Wrong type of cell. Bailing out...")
return
}
let isResolved = ...// Probably by looking into something like `self.resolvedIssues.firstIndex(of:self.issues[indexPath.row].documentId)` judging from your code
if isResolved {
print("THIS HAS BEEN SELECTED RESOLVED")
self.resolvedIssueType.append(self.issues[indexPath.row].partType)
self.resolvedIssues.append(self.issues[indexPath.row].documentId)
print(self.resolvedIssues)
} else {
print("THIS HAS BEEN SELECTED NOT RESOLVED")
if let index = self.resolvedIssues.firstIndex(of:self.issues[indexPath.row].documentId) {
self.resolvedIssues.remove(at: index)
self.resolvedIssueType.remove(at: index)
}
print(self.resolvedIssues)
print(self.resolvedIssueType)
}
tableView.reloadRows(at: [indexPath], with: .automatic)
}
, а затем визуальное состояние ваших клеток отражает вашу модель:
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = ...
cell.resolvedLabel.isHidden = <whatever_makes_sense>
...
}