我试图以编程方式在UICollectionView的每个单元格中创建一个按钮;但是,只有第一个按钮可见。我已经尝试添加print语句来查看我的单元格有哪些子视图,并且按钮存在但是它没有出现在屏幕上。
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "collectionCell", for: indexPath)
// Configure the cell
let button = UIButton(frame: cell.frame)
button.addTarget(self, action: #selector(cellClicked), for: UIControlEvents.touchUpInside)
button.backgroundColor = UIColor.red
button.tag = indexPath.row
cell.addSubview(button)
print(cell.subviews)
return cell
}
另外,我在点击按钮时添加了一个print语句,只显示第一个按钮并输出0。
@IBAction func cellClicked(sender: UIButton) {
print(sender.tag)
}
非常感谢任何帮助。
答案 0 :(得分:0)
在数据源中添加按钮非常糟糕,因为当重复使用单元格时,将创建新按钮。如果您使用的是Interface Builder,请直接添加按钮。你可以调整他们的属性。您还可以定义自定义单元格,然后按CTRL拖动插座。或者在集合视图的委托中处理选择。
optional public func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath)
另一个解决方案是在单元格的awakeFromNib()
中添加按钮,这只会被调用一次。