【发布时间】:2017-01-26 06:42:47
【问题描述】:
我目前有这个(伪)代码:
var selectedCell: UICollectionViewCell?
override func viewDidLoad() {
super.viewDidLoad()
...
#initialize all objects and pull data from the server to fill the cells
UIView.animate(withDuration: 0, animations: {
self.dataCollectionView.reloadData()
}, completion: {(finished) in
let indexPath = IndexPath(row: 0, section: 0)
self.dataCollectionView.selectItem(at: indexPath, animated: true, scrollPosition: .top)
self.collectionView(self.dataCollectionView, didSelectItemAt: indexPath)
})
}
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "Cell", for: indexPath) as! DataCollectionViewCell
if !selectedCell {
cell.layer.borderWidth = 1
}
else {
cell.layer.borderWidth = 2
}
}
func collectionView(_ collectionView: UICollectionView, didSelectItemAtindexPath: IndexPath) {
let cell = collectionView.cellForItem(at: indexPath)
selectedCell = cell
cell.image = SomeImageFromServer
cell.layer.borderWidth = 2
}
func collectionView(_ collectionView: UICollectionView, didDeselectItemAt indexPath: IndexPath) {
let cell = collectionView.cellForItem(at: indexPath)
cell.layer.borderWidth = 1
}
我的想法是,此代码将在集合视图加载后立即选择第一个单元格,并且确实如此。问题是它也选择了最后一个单元格,但是从不为最后一个单元格调用 didSelectItemAtindexPath,而只为第一个单元格调用。
我尝试使用let indexPath = IndexPath(row: 1, section: 0) 选择第二个单元格,并且在加载集合视图后它确实选择了第二个单元格,并且没有像您想象的那样选择最后一个单元格。
一旦选择了任何一个单元格,最后一个单元格就会被取消选中。
所以我的假设是,这不是认为单元格被“选中”的代码,而是出于某种原因给选中的单元格一个“选中的单元格边框”,但前提是第一个选中的单元格是第一个选中的单元格。有什么想法吗?
【问题讨论】:
标签: ios swift uicollectionview