UICollectionview 将数据追加到数组 Swift

Posted

技术标签:

【中文标题】UICollectionview 将数据追加到数组 Swift【英文标题】:UICollectionview Append data to Array Swift 【发布时间】:2018-05-30 02:28:58 【问题描述】:

我有一个群聊应用程序,只要我点击用户,我就可以将用户添加到群中。群组成员选择页面如下所示:

每当我点击一个用户时,它都会被添加到顶部的 collectionView 中。我的 collectionView 放在顶部,而 tableview 放在底部。 一旦我点击一个用户,它看起来像:

我有一个错误,我点击的位置无关紧要,即使我点击第二行,用户测试器 2 或第三行,用户苹果,collectionView 显示我第一个用户,然后显示第二个用户附加到它和第三和第四。我应该如何让它显示我点击的用户?

对于我的 collectionView:

func collectionView(_ collectionView: UICollectionView, 
numberOfItemsInSection section: Int) -> Int 
    return chosenUser.count


func updateCollectionView() 
    DispatchQueue.main.async 
        self.collectionView.reloadData()
    


var chosenUser: [User] = []

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

    let user = users[indexPath.row]

    cell.chosenUserImage.layer.cornerRadius = 30
    cell.chosenUserImage.layer.masksToBounds = true
    cell.chosenUserImage.contentMode = .scaleAspectFill

    if let profileImageUrl = user.profileImageUrl 
        cell.chosenUserImage.loadImageUsingCacheWithUrlString(profileImageUrl)
     else 
        cell.chosenUserImage.image = UIImage(named: "profileIcon")
    

    return cell

func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int 
    return chosenUser.count

从我的 tableview 开始:

protocol toRefresh 
func updateCollectionView()

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) 

    let user = users[indexPath.row]
    self.chosenUser.append(user)
    updateCollectionView()
    

我可以知道我在 tableview DidSelectRowAt 上犯了什么错误吗?

【问题讨论】:

为什么有些用户没有图片?如果没有图片,集合视图应该显示什么?我们可以看到itemForRowAtcellForRowAt 的实现吗? 我已经更新了我的 collectionView 的代码。没有图片,因为我没有给用户一些图片。我实际上已经两次问过这个问题,如果他们能告诉我我错过了哪些细节,我们将不胜感激。我是真心求,不是来玩的 我认为在您的 collectionView cellForRow 中应该使用 ChoosenUser 数组而不是您使用过的主数组 users填充 tableView 【参考方案1】:

我认为在您的 collectionView cellForRow 中应该使用 ChoosenUser 数组而不是您用来填充 tableView 的主数组 users p>

你的工作流程

在 TableView DidSelect 中,您将 Selected User 添加到 self.chosenUser 数组中,这是正确的

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) 

    let user = users[indexPath.row]
    /// appending user
    self.chosenUser.append(user)
    updateCollectionView()
    

现在来到 collectionView - 你返回了你选择的用户数组计数

func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int 
    return chosenUser.count

现在说到在 collectionView CellForRow 中出列用户

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

    /// Here You did The mistake - 
    /// You did used main Array **Users**
    let user = users[indexPath.row]

    /// You actually need
    let user = choosenUser[indexPath.row] 

    /// What's Happening?
    /// You selected one user from tableView Appended it to newArray
    /// You Setted collectionView count according to new Array
    /// But you used main Array
    /// ---------------------Example-----------------
    ///Case -> Count is 1 - First user from mainArray will be shown
    /// Case -> count is 2 - First two user from mainArray Users will be shown
    cell.chosenUserImage.layer.cornerRadius = 30
    cell.chosenUserImage.layer.masksToBounds = true
    cell.chosenUserImage.contentMode = .scaleAspectFill

    if let profileImageUrl = user.profileImageUrl 
        cell.chosenUserImage.loadImageUsingCacheWithUrlString(profileImageUrl)
     else 
        cell.chosenUserImage.image = UIImage(named: "profileIcon")
    

    return cell

【讨论】:

乐于助人,欢迎

以上是关于UICollectionview 将数据追加到数组 Swift的主要内容,如果未能解决你的问题,请参考以下文章

C# Web API:迭代数组并追加到 HTML 表

如何将相机/照片库中的图像保存到要在 UICollectionView 中显示的数组中

将空行插入或追加到 numpy 数组

将 CloudKit 的结果快速追加到数组中

Swift数组追加不适用于collectionView重新加载数据

对象追加到数组里