У меня есть модальное окно с необязательными свойствами. Как вы уже догадались, я добавляю UIView только для необязательных свойств. В следующем коде dueDate
является необязательным. У первого есть срок, а у второго нет.
let london = Task( name: "Hello from London",
createdDate: Date(),
isCompleted: false,
dueDate: Date())
let madrid = Task( name: "hola desde madrid",
createdDate: Date(),
isCompleted: false)
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: TableViewCell.identifier, for: indexPath) as! TableViewCell
if let _ = tasks[indexPath.row].dueDate {
cell.textLabel?.text = "Due Date"
}
return cell
}
Когда я открываю приложение, оно работает так, как я ожидаю. Только первая ячейка имеет Due Date
. Я ожидаю, что это так, поскольку это только первая задача, которая имеет срок выполнения. Однако, когда я удаляю первую ячейку (см. код ниже) и перезагружаю дату, Due Date
добавляется и во вторую ячейку. Я не понимаю этого. Я ожидаю, что его не следует добавлять, так как вторая задача не имеет срока выполнения
func tableView(_ tableView: UITableView, editActionsForRowAt indexPath: IndexPath) -> [UITableViewRowAction]? {
let remove = UITableViewRowAction(style: .normal, title: "Remove") { action, index in
let task = self.tasks.remove(at: indexPath.row)
print(task.name) //
tableView.reloadData()
}
remove.backgroundColor = .red
return [remove]
}
Если вам нужна дополнительная информация, просто спросите.
Это из-за удаления из очереди, поэтому замените его на
cell.textLabel?.text = tasks[indexPath.row].dueDate != nil ? "London" : ""
когда вы удаляете первую ячейку, она удаляется из очереди второй ячейкой, поэтому вы видите вторую ячейку, настроенную с атрибутами удаленной, поэтому внутри cellForRowAt
вам нужно убедиться, что вы устанавливаете код при каждом запуске.
добавьте его в ячейку прототипа и сделайте его скрытым, покажите его, когда дата равна нулю
это поможет stackoverflow.com/questions/25413239/…
Посмотрите на свою ячейкуForRow:
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: TableViewCell.identifier, for: indexPath) as! TableViewCell
if let _ = tasks[indexPath.row].dueDate {
cell.textLabel?.text = "London"
}
return cell
}
Теперь, когда вы удаляете ячейку, вы вызываете reloadData
ячейку, у которой раньше была дата выполнения, а теперь нет. Поскольку if
не выполняется, вы ничего не делаете с ячейкой. Добавьте случай else
.
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: TableViewCell.identifier, for: indexPath) as! TableViewCell
if let _ = tasks[indexPath.row].dueDate {
cell.textLabel?.text = "London"
}
else {
cell.textLabel?.text = nil
}
return cell
}
Спасибо. Оно работает. Как я могу добавить UIView в
TableViewCell
, если dueDate равен нулю?