如何在 swift ios 中单击该单元格时在 UICollectionViewcell 中显示图像?

Posted

技术标签:

【中文标题】如何在 swift ios 中单击该单元格时在 UICollectionViewcell 中显示图像?【英文标题】:How to show an image in a UICollection View cell while clicking that cell in swift ios? 【发布时间】:2016-12-15 09:02:24 【问题描述】:
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell 


    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "Cell", for: indexPath) as! PlaceCollectionViewCell



    //let imageView = UIImageView()
    //cell.backgroundColor = UIColor(colorLiteralRed: 0.278, green: 0.694, blue: 0.537, alpha: 1.00)

    cell.layer.borderWidth = 0.5
    cell.layer.borderColor = UIColor(colorLiteralRed: 0.278, green: 0.694, blue: 0.537, alpha: 1.00).cgColor


   //cell.placeLabel.tintColor = UIColor(colorLiteralRed: 0.278, green: 0.694, blue: 0.537, alpha: 1.00).cgColor

    cell.layer.cornerRadius = 40
    cell.layer.masksToBounds = true


    print("places\(indexPath.row)")
    //cell.placeLabel.text = places[indexPath.row] as! String
    cell.placeLabel.text = places[indexPath.row]
    cell.placeLabel.textColor = UIColor(colorLiteralRed: 0.278, green: 0.694, blue: 0.537, alpha: 1.00)

    // code for VIew
    let view = UIView(frame: cell.bounds)
     //Set background color that you want
    view.backgroundColor = UIColor(colorLiteralRed: 0.278, green: 0.694, blue: 0.537, alpha: 1.00)
    cell.selectedBackgroundView = view



    return cell

我在收藏视图单元格中有一张图片。我只需要在单击单元格时显示该图像。我们必须在 cellforRowat 索引路径中执行吗?

//Custom class code:


  @IBOutlet weak var tickImageView: UIImageView!

@IBOutlet weak var placeViewBtn: UIButton!
@IBOutlet weak var placeLabel: UILabel!

@IBOutlet weak var imageView: UIImageView!
override func layoutSubviews() 


   override func awakeFromNib() 

    self.imageView.layer.cornerRadius = self.imageView.frame.size.width/2

    self.imageView.layer.masksToBounds = true
    super.awakeFromNib()
    // Initialization code

添加了自定义类代码。我想显示我在上面声明的 ticMark 图像。

【问题讨论】:

你必须使用 didselectrowatindexpath 方法 “我在集合视图单元格中有一张图片。我只需要在单击该单元格时显示该图片。”是什么意思? @NiravD 实际上这是一个“tickmark”图像。当我单击collectionview 中的一个单元格时,该标记图像应仅显示在该单元格上。 @RakeshMohan 你设置了tableView的多选模式还是单选模式? @RakeshMohan 为将被选中的特定单元格创建一个属性(可能是一个布尔变量)。 (这将在 didSelectItem 方法中更改)。重新加载您的 collectionview 单元格。在 cellForItemAtIndexPAth 方法中添加隐藏或显示 imageView 的逻辑。 【参考方案1】:

声明一个IndexPath 类型的实例并保持单元状态是selected 还是不包含它。现在像这样在cellForItemAt indexPathdidSelectItemAt indexPath 中使用这个数组。

var selectedIndexPaths = IndexPath()

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell 
    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "Cell", for: indexPath) as! PlaceCollectionViewCell
    //Your code 

    //decide weather to show tick image or not
    self.tickImageView.isHidden = self.selectedIndexPaths != indexPath


func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath)    
    if self.selectedIndexPaths == indexPath 
         self.selectedIndexPaths = IndexPath()
    
    else 
         self.selectedIndexPaths = indexPath
    
    self.tableview.reloadData()

【讨论】:

我必须只在我选择的单元格上显示它。现在它显示在我选择的所有单元格上。 @RakeshMohan 您一次只想选择一个单元格? 是的。我只需要在我选择的单元格中显示该图像。 @RakeshMohan 这也是上面的代码,我问你一次只想要一个选定的单元格而不是多个? 没错。这就是我所需要的。【参考方案2】:

您需要阅读在 cellForRow 中是否选择了勾号

如果勾选了 显示图像 别的 隐藏图像

然后在 didSelectRow 将勾选设置为选中或取消选中 然后调用 reloadRowForIndexPath

【讨论】:

以上是关于如何在 swift ios 中单击该单元格时在 UICollectionViewcell 中显示图像?的主要内容,如果未能解决你的问题,请参考以下文章

单击表格视图单元格时启动默认电子邮件应用程序 - IOS

iOS中删除单元格时UICollectionView的动画时间

在 UITableView (swift2) 中选择单元格时更新/重新加载 ViewController

如何在UITableView - Swift中制作清单?

iOS 8 Swift UICollectionView reloadData() 导致视图(图像)跳转单元格

如何在使用 tableViews 自调整单元格时在运行时更改表格视图单元格高度?