Swift 4.2 Добавить / Удалить кнопки с UICollectionViewCell - PullRequest
0 голосов
/ 27 октября 2018

Я пытаюсь добавить UIButton к каждой ячейке в моем UICollectionView, когда нажата кнопка (за пределами UICollectionView), а затем удалить их, когда ее нет.

В основном, boolean, если true - показать / добавить, иначе скрыть / удалить. Это мой cellForItemAt. Я также попытался добавить его к willDisplay cell.

let btnItemDelete = UIButton()
btnItemDelete.tag = indexPath.row
btnItemDelete.addTarget(self, action: #selector(self.btnItemDeleteClick), for: .touchUpInside) //Selector works
btnItemDelete.frame = CGRect(x: cell.bounds.width-22, y: 2, width: 20, height: 20) //Creation works
btnItemDelete.setImage(deleteImage, for: .normal) //Image works



if (isEdit) {
    //Add or Show
    cell.addSubview(btnItemDelete)
}
else {
    //Delete or Hide
    btnItemDelete.removeFromSuperview()
}

При запуске этого параметра isEdit изначально установлен в значение false, и кнопки не отображаются. После нажатия кнопки, чтобы изменить логическое значение, появляются кнопки. При нажатии кнопки, чтобы установить логическое значение обратно в false, кнопки остаются. Я полагаю, что это что-то с btnItemDelete.removeFromSuperview() - есть ли другой подход для этого? Я подумал, что не могу их скрыть / показать, потому что он будет продолжать добавлять новую кнопку в ячейку при каждой перезагрузке.

1 Ответ

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

Сначала нужно добавить к

cell.contentView не cell

К этому

btnItemDelete.removeFromSuperview()

вы удаляете кнопку на лету, которая не добавлена, вместо этого вам нужно

cell.contentView.subviews.forEach {
  if $0.tag == 12 {
     $0.removeFromSuperview()
   }
}

Я думаю, что лучший подход - это добавить кнопку ранее в макет ячейки, а затем управлять ее внешним видом, как

cell.myButton.isHidden = !isEdit
...