【发布时间】:2019-07-01 02:56:20
【问题描述】:
我有一个自定义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 使用原型单元格并不完全正确,但我已经看到其他程序员和 YouTube 用户成功地做到了这一点。我的问题来自使用原型单元吗?还是我以错误的方式从数组中删除了该项目?谢谢大家的帮助!
【问题讨论】:
标签: arrays swift uitableview