Удалить UICollectionViewCell с помощью пользовательской кнопки - PullRequest
0 голосов
/ 30 мая 2018

Этот подход удаляет случайную ячейку, но не ту, которую я хочу.Я думаю, что проблема заключается в инициализации кнопки с помощью indexPath, и я не знаю, как это исправить.

Если я не ошибаюсь, indexPath.item указывает строку в UICollectionView.Так где же ошибка?

extension UIButton {

    struct Holder {
        static var _myComputedProperty:IndexPath!
    }
    var indexPath:IndexPath {
        get {
            return Holder._myComputedProperty
        }
        set(newValue) {
            Holder._myComputedProperty = newValue
        }
    }
}

public func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
    return arrRequest.count
}

public func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {

    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cellId", for: indexPath) as! RequestCell
    cell.delete.indexPath = indexPath
    cell.delete.addTarget(nil, action: #selector(del(sender:)), for: .touchUpInside)

    return cell
}

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
    return CGSize(width: collectionView.frame.width, height: 235)
}

@objc func del(sender: UIButton) {

    arrRequest.remove(at: sender.indexPath.item)

    self.collectionView.performBatchUpdates({
        self.collectionView.deleteItems(at: [sender.indexPath])
    }) { (finished) in
        self.collectionView.reloadItems(at: self.collectionView.indexPathsForVisibleItems)
    } 
}

1 Ответ

0 голосов
/ 30 мая 2018

Пожалуйста, измените ваш код, как показано ниже

public func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {

    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cellId", for: indexPath) as! RequestCell
    cell.delete.tag = index path.row
    cell.delete.addTarget(nil, action: #selector(del(sender:)), for: .touchUpInside)

    return cell
}

И ваш метод удаления будет следующим:

@objc func del(sender: UIButton) {

let indexPath = IndexPath(item: sender.tag, section: 0)

    arrRequest.remove(at: indexPath)

    self.collectionView.performBatchUpdates({
        self.collectionView.deleteItems(at: [indexPath])
    }) { (finished) in
        self.collectionView.reloadItems(at: self.collectionView.indexPathsForVisibleItems)
    } 
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...