【问题标题】:Swift 4.2 Add/Remove buttons with UICollectionViewCellSwift 4.2 使用 UICollectionViewCell 添加/删除按钮
【发布时间】:2019-04-01 03:50:58
【问题描述】:

当按下按钮(在UICollectionView 之外)时,我试图在我的UICollectionView 中的每个单元格中添加一个UIButton,然后在没有按下按钮时将其删除。

基本上,boolean 如果为真 - 显示/添加,否则隐藏/删除。这是我的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() 的问题 - 有没有不同的方法来做到这一点?我想我不能隐藏/显示它们,因为它只会在每次重新加载时继续向单元格添加一个新按钮。

【问题讨论】:

    标签: ios swift uicollectionview uibutton uicollectionviewcell


    【解决方案1】:

    首先你需要添加到

    cell.contentView 不是cell

    由此

    btnItemDelete.removeFromSuperview()
    

    你删除了一个未添加的按钮,而是你需要

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

    我认为最好的方法是在单元格布局上添加按钮,然后管理它的外观

    cell.myButton.isHidden = !isEdit
    

    【讨论】:

    • $0 删除了整个单元格的内容,但我决定将其添加到情节提要中并像这样隐藏/显示它。我会给你的第二个选择。
    • 所有子视图都有0标签,所以你需要给按钮其他单独的标签
    • 您可能希望该标记为 indexPath.row ,因此您可以使用另一个属性扩展按钮,或者像使用其他替代项一样顺利进行
    猜你喜欢
    • 2019-08-25
    • 2018-01-27
    • 1970-01-01
    • 2018-11-09
    • 2019-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多