在 1 个集合视图中选择单元格以更改第二个集合视图属性(Xcode)
Posted
技术标签:
【中文标题】在 1 个集合视图中选择单元格以更改第二个集合视图属性(Xcode)【英文标题】:Selecting cell in 1 Collection View to change second Collection View properties (Xcode) 【发布时间】:2020-09-26 23:21:35 【问题描述】:我在 Xcode 中设置了 2 个集合视图 - 一个包含具有背景颜色的空单元格,另一个包含图像集合。
当我在第一个集合视图中选择一个单元格时,我想更改第二个集合视图中的所有背景颜色以匹配我选择的单元格的背景颜色。
我遇到的问题是第二个集合视图中只有具有匹配索引路径的单元格会发生变化,即如果我选择第三种颜色,则第三张图像会发生变化。
如何使第二个集合视图中的所有单元格都改变颜色?我知道这与索引路径有关,但不知道如何绕过它。
代码:
class ViewController: UIViewController, UICollectionViewDataSource, UICollectionViewDelegate, UICollectionViewDelegateFlowLayout
@IBOutlet weak var colourView: UICollectionView!
@IBOutlet weak var iconView: UICollectionView!
@IBOutlet weak var height: NSLayoutConstraint!
let colours = [
UIColor(red: 0.94, green: 0.31, blue: 0.41, alpha: 1.00),
UIColor(red: 0.95, green: 0.45, blue: 0.23, alpha: 1.00),
UIColor(red: 1.00, green: 0.89, blue: 0.49, alpha: 1.00),
UIColor(red: 0.73, green: 0.72, blue: 0.42, alpha: 1.00),
UIColor(red: 0.01, green: 0.44, blue: 0.61, alpha: 1.00),
UIColor(red: 0.56, green: 0.89, blue: 0.90, alpha: 1.00),
UIColor(red: 0.84, green: 0.84, blue: 0.84, alpha: 1.00),
]
let images = [UIImage(named: "home"), UIImage(named: "work"), UIImage(named: "key"), UIImage(named: "supermarket"), UIImage(named: "restaurant"), UIImage(named: "tree") , UIImage(named: "parking"), UIImage(named: "rugby"), UIImage(named: "medicine"), UIImage(named: "mortar"), UIImage(named: "ticket"), UIImage(named: "star")]
override func viewDidLoad()
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
func numberOfSections(in collectionView: UICollectionView) -> Int
1
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int
if (collectionView == iconView)
return self.images.count
return self.colours.count
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize
let width = view.frame.size.width
if (collectionView == iconView)
return CGSize(width: width * 0.2, height: width * 0.2)
return CGSize(width: width * 0.1, height: width * 0.1)
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell
if (collectionView == iconView)
let cell2 = iconView.dequeueReusableCell(withReuseIdentifier: "iconcell", for: indexPath) as! IconCollectionViewCell
cell2.iconimage.image = self.images[indexPath.item]
return cell2
let colourcell = colourView.dequeueReusableCell(withReuseIdentifier: "colourcell", for: indexPath) as! ColourCollectionViewCell
colourcell.backgroundColor = colours[indexPath.row]
return colourcell
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath)
let cell = colourView.cellForItem(at: indexPath) as! ColourCollectionViewCell
let cell2 = iconView.cellForItem(at: indexPath) as! IconCollectionViewCell
if cell.isSelected
cell2.iconimage.backgroundColor = cell.backgroundColor
提前致谢
【问题讨论】:
放一个示例代码要做很多事情,但基本上你必须知道的是:当你选择颜色时,把它放在一个变量中,然后重新加载会改变颜色的集合视图。在声明一个变量:
class ViewController:
var newColor : UIColor?
改变这个:
if cell.isSelected
cell2.iconimage.backgroundColor = cell.backgroundColor
为此:
if cell.isSelected
newColor = cell.backgroundColor
iconView.reloadData()
在
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell
放这个
if newColor != nil // maybe a better test here, if cell was selected
cell2.iconimage.backgroundColor = newColor
之前
return cell2
【讨论】:
以上是关于在 1 个集合视图中选择单元格以更改第二个集合视图属性(Xcode)的主要内容,如果未能解决你的问题,请参考以下文章
自动大小表格视图单元格扩展高度中的嵌套水平集合视图使集合视图滚动重置当重新加载单元格以累积行
Swift UIcollectionView 在同一个 ViewController 上更改第二个 UICollectionView 的内容?