Кажется, вы добавляете кнопку к UIViewController
view
вместо cell
. Я внес исправления и заставил ваш код работать на Xcode-игровой площадке. Я выложу его здесь, опробую на вашей игровой площадке и лично проверю, как это работает.
import UIKit
import PlaygroundSupport
class ViewController: UICollectionViewController {
override func viewDidLoad() {
super.viewDidLoad()
collectionView.register(UICollectionViewCell.self, forCellWithReuseIdentifier: "cell")
}
override func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
30
}
override func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cell", for: indexPath)
cell.backgroundColor = .red
let nextButton = UIButton()
nextButton.translatesAutoresizingMaskIntoConstraints = false
nextButton.setImage(UIImage(systemName: "gear"), for: .normal)
nextButton.tintColor = UIColor.black
nextButton.addTarget(self, action: #selector(editButtonTapped), for: .touchUpInside)
nextButton.heightAnchor.constraint(equalToConstant: 100).isActive = true
nextButton.widthAnchor.constraint(equalToConstant: 100).isActive = true
cell.addSubview(nextButton)
nextButton.centerXAnchor.constraint(equalTo: cell.centerXAnchor).isActive = true
nextButton.bottomAnchor.constraint(equalTo: cell.bottomAnchor).isActive = true
return cell
}
@IBAction func editButtonTapped() -> Void {
print("Hello Edit Button")
}
}
let layout = UICollectionViewFlowLayout()
layout.itemSize = CGSize(width: 150, height: 150)
PlaygroundPage.current.setLiveView(ViewController(collectionViewLayout: layout))
PlaygroundPage.current.needsIndefiniteExecution = true