私はcollectionViewを持っています。すべてのセルにはボタンactionButton
が含まれています。ボタンは添付されたターゲットを介して削除する方法removeItem
を持っています。私は配列を持っていますdatas
はコレクションのためのアイテムを含んでいます。collectionView内のボタンのインデックスが間違っています。削除後のセルcell
override func collectionView(_ collectionView: UICollectionView, willDisplay cell: UICollectionViewCell, forItemAt indexPath: IndexPath) {
super.collectionView(collectionView, willDisplay: cell, forItemAt: indexPath)
guard let cell = cell as? ViewCell else { return }
let index = indexPath.row % datas.count
let item = datas[index]
cell.item = item
cell.actionButton.tag = indexPath.item
cell.actionButton.addTarget(self, action: #selector(removeItem), for: .touchUpInside)
}
コレクションビューからアイテムを削除する方法があります。
@objc func removeItem(sender: UIButton) {
let indexPath = IndexPath.init(item: sender.tag, section: 0)
self.datas.remove(at: indexPath.item)
collectionView?.deleteItems(at: [indexPath])
}
ただし、削除した項目の後に、コレクションのセルのボタンのインデックスが再ロードされません。たとえば、インデックス[0、0]の1番目のアイテムを削除した場合、次のアイテム(2番目)は1番目になりましたが、ボタンインデックスは[0、1]です。
なぜ私は間違っているのですか、なぜボタンインデックスが並べ替えられないのですか?
コレクションビューを再読み込みする必要がありますか? – AlexWoe89
'collectionView?.deleteItems(at:[indexPath])'の後に 'collectionView.reloadData()'を追加しようとしましたが、助けになりませんでした。 – andrey
無関係ですが、なぜあなたの 'collectionView'はオプションですか? – rmaddy