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 上犯了什么错误吗?
【问题讨论】:
为什么有些用户没有图片?如果没有图片,集合视图应该显示什么?我们可以看到itemForRowAt
和cellForRowAt
的实现吗?
我已经更新了我的 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的主要内容,如果未能解决你的问题,请参考以下文章
如何将相机/照片库中的图像保存到要在 UICollectionView 中显示的数组中