在我的CollectionView
中,我希望用户选择单元格。如果选择了单元格,则应显示图像,标签应消失。用户还应该能够再次取消选择单元格,然后再次选择它(取消选择后的选择此时不起作用)。
标签的文本来自一个数组并正确显示。
但是在选择单元格时,然后选择滚动其他单元格。当再次向后滚动其他单元格时,从未触摸过的选定单元格。我认为必须重复使用单元格,所以我已经在单元格的类中添加了prepareForReuse
方法。
我还希望存储用户关闭应用时选择的单元格,并在再次打开时将其显示为已选中。
另一个问题是,当我还选择某个其他单元格时,我希望它只能选择一个单元格。这样做的最佳方式是什么?
class CollectionViewController: UICollectionViewController {
var array:[String] = []
var selectedIndexes:NSMutableDictionary = NSMutableDictionary()
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
doors = ["1","2","3"]
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
override func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return array.count
}
override func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
let cell:MyCollectionViewCell = collectionView.dequeueReusableCellWithReuseIdentifier("cell", forIndexPath: indexPath) as! MyCollectionViewCell
var Label = cell.viewWithTag(1) as! UILabel
Label.text = array[indexPath.row]
let keystring = String(format:"%i", indexPath.row)
if (self.selectedIndexes[keystring] != nil) {
cell.myLabel.hidden = true
cell.myImageView.image = UIImage(named:"1")!
}
else {
}
return cell
}
override func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath) {
let keystring = String(format:"%i", indexPath.row)
if (self.selectedIndexes[keystring] != nil) {
let cell = collectionView.cellForItemAtIndexPath(indexPath) as! MyCollectionViewCell
cell.myLabel.hidden = false
cell.myImageView.image = nil
}
else {
selectedIndexes.setObject(keystring, forKey: keystring)
let cell = collectionView.cellForItemAtIndexPath(indexPath) as! MyCollectionViewCell
cell.myLabel.hidden = true
cell.myImageView.image = UIImage(named:"1")!
}
CollectionViewCell的类:
class MyCollectionViewCell: UICollectionViewCell {
@IBOutlet weak var myLabel: UILabel!
@IBOutlet weak var myImageView: UIImageView!
override func prepareForReuse() {
super.prepareForReuse()
self.myImageView.image = nil
self.myLabel.hidden = false
答案 0 :(得分:0)
重复使用单元格(这极大地优化了表格滚动速度等),正如您所描述的那样,这是您的“问题”。 您所要做的就是在加载它们的时候“重新初始化”单元格上的文本和标签等。最好的办法是将您的单元格内容放在一个对象中,并将这些对象放在一个数组中。当我加载单元格时,然后使用cellForRowAtIndexPath(通常是默认实现中的indexPath.row)根据数组中对象的值设置值