Swift 在 UITableViewCell 内的 UICollectionView 的单选/多选模式下进行选择/取消选择
Posted
技术标签:
【中文标题】Swift 在 UITableViewCell 内的 UICollectionView 的单选/多选模式下进行选择/取消选择【英文标题】:Swift make select/unselect in single/multiple selection mode for UICollectionView inside UITableViewCell 【发布时间】:2020-01-08 10:17:00 【问题描述】:我是 ios 新手,我想在 UITableView 中实现一个 UICollectionView,它可以在 UITableview 的第 1 部分中进行多个选择/取消选择。在第 2 节中,只允许进行一次选择。如果我关闭 Viewcontroller 并且当我再次打开它时,它必须将最后选择的单元格显示为突出显示,并保存选择状态事件。
我搜索了教程,但所有教程都没有提到选择/取消选择集合单元格的状态或在关闭视图控制器后保存状态。
有人可以帮忙实现吗?
提前致谢!
这是我到现在为止的代码:
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int
return clvData.count
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "clvCell", for: indexPath) as! demoCollectionViewCell
cell.title.text = clvData[indexPath.item] as? String
return cell
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath)
let cell = collectionView.cellForItem(at: indexPath)
cell?.backgroundColor = .red
func collectionView(_ collectionView: UICollectionView, didDeselectItemAt indexPath: IndexPath)
let cell = collectionView.cellForItem(at: indexPath)
cell?.backgroundColor = .white
你们也可以在这里查看我的项目: https://mega.nz/#!xRs0EQyQ
【问题讨论】:
能否请您在此处发布一些您到目前为止所做的代码。 我添加了我选择的代码并上传了我当前的演示项目。你可以检查一下。 要进行多项选择,请查看here。并且对于单一选择,将数组替换为单个对象/数据而不是数组。 那么,关闭视图控制器然后再次打开时保存选择状态如何? 【参考方案1】:试试这个,如果您有任何问题或者这是否解决了您的问题,请告诉我。
var arrSelectedIndex:[IndexPath] = []// store this array either in database by api or in local
var clvData:[String] = []// your data array
//get the arrSelectedIndex from default in viewDidLoad before reloading the table and collection.
override func viewDidLoad()
super.viewDidLoad()
if let myArray = UserDefaults.standard.array(forKey: "selectedArray") as? [IndexPath]
arrSelectedIndex = myArray
else
arrSelectedIndex = []
// and save the arrSelectedIndex in viewWillDisappear method
override func viewWillDisappear(_ animated: Bool)
super.viewWillDisappear(animated)
UserDefaults.standard.set(arrSelectedIndex, forKey: "selectedArray")
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int
return clvData.count
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "clvCell", for: indexPath) as! demoCollectionViewCell
cell.title.text = clvData[indexPath.item] as? String
if arrSelectedIndex.contains(indexPath) // You need to check wether selected index array contain current index if yes then change the color
cell.backgroundColor = UIColor.red
else
cell.backgroundColor = UIColor.white
return cell
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath)
let cell = collectionView.cellForItem(at: indexPath)
cell?.backgroundColor = .red
if !arrSelectedIndex.contains(indexPath) // if it does not contains the index then add it
arrSelectedIndex.append(indexPath)
func collectionView(_ collectionView: UICollectionView, didDeselectItemAt indexPath: IndexPath)
let cell = collectionView.cellForItem(at: indexPath)
cell?.backgroundColor = .white
if let currIndex = arrSelectedIndex.firstIndex(of: indexPath) // if it contains the index then delete from array
arrSelectedIndex.remove(at: currIndex)
【讨论】:
我试过你的建议,效果很好。但是还有一个要求是在关闭后保存集合视图的选定状态。再次打开时必须突出显示。我目前正在使用UserDefaults
来保存arrSelectedIndex
,但它有一个错误。您可以查看此 gif 以获取更多详细信息:media.giphy.com/media/S8B5Ajtg7zcYkvPsdg/giphy.gif
我看不到 gif,你能在这里写下你发现了什么错误吗?顺便说一句,我已经更新了答案,看看那个。以上是关于Swift 在 UITableViewCell 内的 UICollectionView 的单选/多选模式下进行选择/取消选择的主要内容,如果未能解决你的问题,请参考以下文章
从 UITableViewCell 中点击 Swift 更改标签文本颜色
在 Swift 中连接 UITableViewCell 标签
Swift3:UITableViewCell 和 UIButton - 通过单击 UIButton 显示和隐藏 UITableViewCell
Swift:在 UITableViewCell 中异步加载图像 - 自动布局问题