这是Xcode 7.3.1,swift 2
我有一个带有UICollectionView的视图控制器,它是UIView的子视图。集合视图的单元格具有标识符" NumberCell"。
这是我的ViewController中的cellForItemAtIndexPath
func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
if let cell = collectionView.dequeueReusableCellWithReuseIdentifier("NumberCell", forIndexPath: indexPath) as? NumberCell {
let currentNumber = indexPath.row + 1
cell.configureCell(currentNumber)
cell.numberBtn.tag = currentNumber;
cell.numberBtn.addTarget(self, action: #selector(ViewController.playerClickedButton(_:)), forControlEvents: UIControlEvents.TouchUpInside)
return cell
} else {
return UICollectionViewCell()
}
}
这是我的手机" configureCell" (不是它应该重要)
func configureCell(cellNumber: Int) {
backNumberLbl.text = "\(cellNumber)"
frontNumberLbl.text = "\(cellNumber)"
self.tag = cellNumber
numberBtn.tag = cellNumber
}
我遇到了视觉问题,而不是崩溃。当我滚动时,新单元格显示已从屏幕滚动的单元格的特征。我已经改变了标识符,但仍然破碎了。我把它改回来了,还是坏了。我已经在cell.configureCell(currentNumber)下注释掉了其他代码行。
我已经搜遍过,无法解决这个问题。
感谢StackOverflow社区!
答案 0 :(得分:0)
由于我的声誉,我无法添加评论。但我之前遇到过这样的问题。
如果您使用代码,请检查您是否在public func registerClass(cellClass: AnyClass?, forCellWithReuseIdentifier identifier: String)
中调用了方法viewDidLoad
。
如果您使用Nib,请检查您是否调用了方法registerNib(nib: UINib?, forCellWithReuseIdentifier identifier: String)
。
如果您使用情节提要,请不要调用方法public func registerClass(cellClass: AnyClass?, forCellWithReuseIdentifier identifier: String)
或registerNib
。
有关详细信息,如果损坏(I've changed the identifier, still broken
)表示崩溃,则最好发布控制台日志。
更新: 我根据你的代码得到了预期的结果。这是我的代码:
class ViewController: UIViewController {
@IBOutlet weak var collectView: UICollectionView!
override func viewDidLoad() {
super.viewDidLoad()
}
}
extension ViewController : UICollectionViewDelegate, UICollectionViewDataSource {
func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return 50
}
func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
if let cell = collectionView.dequeueReusableCellWithReuseIdentifier("NumberCell", forIndexPath: indexPath) as? NumberCell {
let currentNumber = indexPath.row + 1
cell.configureCell(currentNumber)
cell.numberBtn.tag = currentNumber;
cell.numberBtn.addTarget(self, action: #selector(ViewController.playerClickedButton(_:)), forControlEvents: UIControlEvents.TouchUpInside)
return cell
} else {
return UICollectionViewCell()
}
}
func playerClickedButton(button: UIButton) {
print(button.tag)
}
}
class NumberCell: UICollectionViewCell {
@IBOutlet weak var backNumberLbl: UILabel!
@IBOutlet weak var frontNumberLbl: UILabel!
@IBOutlet weak var numberBtn: UIButton!
func configureCell(cellNumber: Int) {
backNumberLbl.text = "\(cellNumber)"
frontNumberLbl.text = "\(cellNumber)"
self.tag = cellNumber
numberBtn.tag = cellNumber
}
}
答案 1 :(得分:-1)
让currentNumber = indexPath.row + 1
cell.configureCell(currentNumber)
这里,您要为当前的indexPath出列单元格,但是尝试配置尚未出列的下一个单元格。