如何为我的 CollectionView 单元格提供 onclick 功能?

Posted

技术标签:

【中文标题】如何为我的 CollectionView 单元格提供 onclick 功能?【英文标题】:How can I have onclick functionality for my CollectionView cells? 【发布时间】:2019-12-16 18:21:49 【问题描述】:

我想这样当我点击 CollectionView 单元格时,它会转到另一个视图。我还想将用户 ID 传递给该视图,以便查询数据库。这是我迄今为止实现的:

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


        let cell = collectionview.dequeueReusableCell(withReuseIdentifier: "userCell", for: indexPath) as! UserCell

        print(user[indexPath.row].imagePath!)


        cell.userImage.sd_setImage(with: URL(string: user[indexPath.row].imagePath!))

        cell.nameLabel.text = user[indexPath.row].username
        cell.userID = user[indexPath.row].userID

        let destinationVC = ProfileViewController()
        destinationVC.sentUserID = user[indexPath.row].userID!

        // Let's assume that the segue name is called playerSegue
        // This will perform the segue and pre-load the variable for you to use
        //destinationVC.performSegue(withIdentifier: "toProfileFromSearch", sender: self)


        cell.addButtonTapAction = 
            // implement your logic here, e.g. call preformSegue()
            self.performSegue(withIdentifier: "toProfileFromSearch", sender: self)
        
        //cell.userImage.downloadImage(from: self.user[indexPath.row].imagePath!)
        //checkFollowing(indexPath: indexPath)


        return cell
    

这是在每个单元格的单独创建中。当我点击搜索区域中的用户个人资料时,没有任何反应。

我遵循了其他堆栈溢出问题来做到这一点。任何人都可以为其他需要此功能的人制定完整的解决方案吗?

【问题讨论】:

【参考方案1】:

你可以使用didSelectItemAt函数,检查一下

func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) 
    let VC1 = self.storyboard!.instantiateViewController(withIdentifier: "IDYOURVIEW") as! ProfileViewController
    VC1.sentUserID = user[indexPath.row].userID!
    self.navigationController?.pushViewController(VC1, animated: true)

如果您使用的是转场

func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) 
    self.performSegue(withIdentifier: "toProfileFromSearch", sender: user[indexPath.row].userID!)


override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject!) 

    if segue.identifier == "toProfileFromSearch"
    
      let vc = segue.destination as? ProfileViewController
      if let id = sender as! String
      
          vc?.sentUserID = id
      
    

【讨论】:

我需要这两种实现吗?我正在尝试 didSelectItemAt 并且它没有注册我的点击。我在那里放了一个 print 语句,看看是否只是 segue 不起作用,但 print 语句从不打印。 不是,你需要选择一个,我建议你第二种方式,但首先在你的cellForRowAt函数中,从let destinationVC这一行删除到cell.addButtonTapAction

以上是关于如何为我的 CollectionView 单元格提供 onclick 功能?的主要内容,如果未能解决你的问题,请参考以下文章

如何为 UICollectionView 中的单元格设置可变单元格间距

如何为集合视图单元格内的视图添加手势?

IOS如何为UICollectionView的第一个单元格设置动画以从右侧滑入

简单的collectionView动画

如何为我的 Spring Boot 控制器执行单元测试?

如何为每个单元分配号码?