UICollectionViewCell делегат не будет запущен - PullRequest
0 голосов
/ 23 октября 2018

Я, очевидно, что-то делаю не так, но пока не могу определить, где.Я настраиваю ячейку следующим образом:

protocol PropertyPhotoCellDelegate: class {
    func deletePropertyPhoto(cell: PropertyPhotoCell)
}

class PropertyPhotoCell: UICollectionViewCell {

    weak var propertyPhotoCellDelegate: PropertyPhotoCellDelegate?

    let deleteButton: UIButton = {
        let button = UIButton()
        let image = UIImage(named: "delete.png")
        button.setImage(image, for: .normal)
        button.showsTouchWhenHighlighted = true
        button.isHidden = true
        button.addTarget(self, action: #selector(handleDeleteButton), for: .touchUpInside)
        return button
    }()

        var isEditing: Bool = false {
        didSet {
            deleteButton.isHidden = !isEditing
        }

    }

Я пропустил настройку представлений ячейки.Вот селектор

@objc fileprivate func handleDeleteButton() {
    propertyPhotoCellDelegate?.deletePropertyPhoto(cell: self)

}

В UICollectionViewController я назначаю делегата

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

        let cell = collectionView.dequeueReusableCell(withReuseIdentifier: kCellId, for: indexPath) as! PropertyPhotoCell
        cell.photoImageView.image = photos[indexPath.item]
        cell.propertyPhotoCellDelegate = self

        return cell
 }

Это скрывает или показывает кнопку удаления в ячейке для всех видимых ячеек

override func setEditing(_ editing: Bool, animated: Bool) {
    super.setEditing(editing, animated: animated)

    navigationItem.rightBarButtonItem?.isEnabled = !editing

    if let indexPaths = collectionView?.indexPathsForVisibleItems {
        for indexPath in indexPaths {
            if let cell = collectionView?.cellForItem(at: indexPath) as? PropertyPhotoCell {
                cell.deleteButton.isHidden = !isEditing
            }
        }
    }
}

И наконец, в соответствии с протоколом здесь

extension PropertyPhotosController: PropertyPhotoCellDelegate {

    func deletePropertyPhoto(cell: PropertyPhotoCell) {

        if let indexPath = collectionView?.indexPath(for: cell) {
            photos.remove(at: indexPath.item)
            collectionView?.deleteItems(at: [indexPath])
        }
    }
}

Я нажимаю кнопку UICollectionViewController Edit, и все ячейки показывают кнопку удаления, как и ожидалось.Любая из кнопок delete подсвечивается при нажатии, но я не вижу, чтобы вызывали delegate.

1 Ответ

0 голосов
/ 23 октября 2018

Когда делегат назначен в UICollectionViewController, также установите селектор для ячейки.

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

    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: kCellId, for: indexPath) as! PropertyPhotoCell
    cell.photoImageView.image = photos[indexPath.item]
    cell.propertyPhotoCellDelegate = self
    cell.deleteButton.addTarget(cell, action: #selector(cell.handleDeleteButton), for: .touchUpInside)
    cell.deleteButton.isHidden = true
    return cell
}
...