У меня есть пользовательский tableviewHeaderFooterView
, где я настраиваю целевое событие для кнопки в пользовательском классе tableViewCell
(checkButton
- кнопка, и ее фоновое изображение меняется на галочку, когда пользователь нажимает на нее).
func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
let userModel = Data.userModels[section]
let cell = tableView.dequeueReusableCell(withIdentifier: "cellId") as! SectionHeader
cell.setup(model: userModel)
cell.checkButton.tag = section
cell.checkButton.addTarget(self, action: #selector(handleTap), for: .touchUpInside)
return cell.contentView
}
И в этой функции я хочу создавать или удалять элементы из массива в зависимости от того, нажимает ли пользователь на ячейку или нет (то есть, если он нажимает на кнопку, то добавляет что-то в массив, но если он нажимает на это снова, затем удалите этот объект из массива.)
@objc func handleTap(sender: UIButton) {
sender.isSelected = !sender.isSelected
if sender.isSelected == true {
let model = ItemModel(itemName: item, price: price)
ItemModelFunctions.createItem(for: sender.tag, using: model)
}
if sender.isSelected == false {
ItemModelFunctions.removeFromUser(from: sender.tag)
}
print(sender.tag)
}
Вот функции createItem
и removeFromUser
:
struct ItemModelFunctions {
static func createItem(for userIndex: Int, using itemModel: ItemModel) {
Data.userModels[userIndex].itemModels.append(itemModel)
}
static func removeFromUser(from userIndex: Int) {
Data.itemModels.remove(at: userIndex)
}
}
Когда я дважды нажимаю на кнопку, чтобы удалить ее из массива, я получаю сообщение о том, что Data.itemModels.remove(at: userIndex)
находится вне диапазона.
Я знаю, что использование прототипа ячейки для tableViewHeaderFooterView
не совсем корректно, но я видел, как другие программисты и YouTubers добились этого с успехом. Мои проблемы связаны с использованием прототипа клетки? Или я удаляю элемент из массива неправильно? Спасибо всем за помощь!