У меня есть UITableView
, который я использую, чтобы показать массив пользовательских объектов.Каждый объект имеет несколько свойств, включая логическое свойство, которое указывает, является ли этот элемент новым или нет.
Мое UITableViewCell
представление содержимого определено в раскадровке и имеет первоначальный макет, подобный следующему:
![enter image description here](https://i.stack.imgur.com/XYyIc.png)
В моем UITableViewController
, когда я снимаю очередь с моих ячеек, я вызываю на своем UITableViewCell
метод, который настраивает данные, которые будут отображаться в ячейке, прежде чем я вернусьЭто.Одним из свойств, которые я проверяю, является свойство .isNew, о котором я упоминал ранее.Если это значение равно true, тогда я создаю UIButton
и вставляю его как подпредставление в представление содержимого ячейки, чтобы в итоге получилось что-то вроде этого:
![enter image description here](https://i.stack.imgur.com/22M4e.png)
Только для контекста, эта кнопка покажет «новое» изображение, чтобы указать, что этот элемент является новым.Я также подключаю метод, который будет срабатывать при нажатии кнопки.Этот метод также определен в моем UITableViewCell
и выглядит следующим образом:
@objc func newIndicatorButtonTapped(sender: UIButton!) {
// call delegate method and pass this cell as the argument
delegate?.newIndicatorButtonTapped(cell: self)
}
Я также создал протокол, который определяет метод делегата.Мой UITableViewController
соответствует этому, и я вижу, что код срабатывает, когда я нажимаю на кнопку в своих ячейках.Вот метод делегата (определенный в расширении на моем UITableViewController
):
func newIndicatorButtonTapped(cell: UITableViewCell) {
if let indexPath = self.tableView.indexPath(for: cell) {
print(indexPath.row)
}
}
Я вижу строку из indexPath
, правильно распечатанную в Xcode, когда я нажимаю на ячейку.Когда мой пользователь нажимает на эту кнопку, мне нужно удалить ее (кнопку) и обновить ограничение для моего UILabel
, чтобы оно снова выровнялось по переднему краю представления содержимого, как показано в первом макете выше.К сожалению, я, похоже, столкнулся с проблемой повторного использования ячеек, потому что UIButton
исчезает и снова появляется в разных ячейках, когда я их прокручиваю.Нужно ли сбрасывать компоновку / внешний вид ячейки, прежде чем она будет переработана, или я что-то неправильно понимаю о том, как работает утилизация ячейки?Любые советы будут высоко оценены!