addTarget не работает для кнопки в UICollectionViewCell - PullRequest
0 голосов
/ 08 июня 2019

Когда я нажимаю на кнопку, селектор не вызывается. Ячейка состоит только из двух компонентов: 1 - изображение, а другой - UIButton. Ниже приведен код ячейки коллекции. Есть ли другой способ добавить метод.

class AttachmentCell: UICollectionViewCell {
   weak var delegate: AttachmentCellDelegate?

let removeButton: UIButton = {
    let button = UIButton(type: .custom)
    button.translatesAutoresizingMaskIntoConstraints = false
    button.setImage(UIImage(named: "close_icon"), for: .normal)
    button.addTarget(self, action: #selector(removeButtonTapped), for: .touchUpInside)
    button.isUserInteractionEnabled = true
    return button
}()

let imageView: UIImageView = {
    let imgView = UIImageView()
    imgView.contentMode = .scaleAspectFill
    imgView.clipsToBounds = true
    return imgView
}()

override init(frame: CGRect) {
    super.init(frame: frame)
    self.backgroundColor = UIColor.red
    self.isUserInteractionEnabled = true

    self.contentView.addSubview(imageView)
    imageView.isUserInteractionEnabled = true
    self.contentView.addSubview(removeButton)
    //self.addSubview(removeButton)

    imageView.snp.makeConstraints { (make) in
        make.leading.equalToSuperview()
        make.trailing.equalToSuperview()
        make.top.equalToSuperview()
        make.bottom.equalToSuperview()
    }

    removeButton.snp.makeConstraints { (make) in
        make.width.equalTo(40)
        make.height.equalTo(40)
        make.top.equalTo(imageView.snp.top).offset(-5)
        make.trailing.equalTo(self.imageView.snp.trailing).offset(5)
    }

    self.backgroundColor = UIColor.gray
}

  @objc func removeButtonTapped() {
     delegate?.didRemoveButtonTapped()
  }
}

1 Ответ

1 голос
/ 09 июня 2019

Изменить let removeButton на lazy var removeButton.

self не существует, пока не будет вызван init.Когда вы добавляете цель к self в константе let, вы определяете ее до вызова init.

В качестве альтернативы просто вызовите addTarget в блоке init.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...