前提・実現したいこと
Swift5.1, iOS11を使用しています。CollectionViewのcustomcellにimageviewを置きimageを表示しています。しかし、タップの判定を確認しても検出されません。普通のcellであれば検出できるのですが、customcellだと何か一工夫が必要なのでしょうか。
該当のソースコード
ViewController
1class HomeViewController: UIViewController { 2 3 @IBOutlet weak var menButton: UIButton! 4 @IBOutlet weak var womenButton: UIButton! 5 @IBOutlet weak var selectedVar: UIView! 6 @IBOutlet weak var collectionImageView: UICollectionView! 7 8 //page chenge value 9 var pageNum: Int! 10 11 var screenSize: CGRect! 12 var screenWidth: CGFloat! 13 var imageHeightSize: CGFloat = 200 14 15 override func viewDidLoad() { 16 super.viewDidLoad() 17 18 self.pageNum = 1 19 20 menButton.setTitleColor(.black, for: .normal) 21 womenButton.setTitleColor(.gray, for: .normal) 22 23 collectionImageView.delegate = self 24 collectionImageView.dataSource = self 25 26 screenSize = UIScreen.main.bounds 27 screenWidth = screenSize.width 28 } 29 30 override func viewWillAppear(_ animated: Bool) { 31 let layout = UICollectionViewFlowLayout() 32 layout.sectionInset = UIEdgeInsets(top: 0, left: 0, bottom: 0, right: 0) 33 layout.minimumInteritemSpacing = 0 34 layout.minimumLineSpacing = 0 35 layout.itemSize = CGSize(width: screenWidth / 3, height:200) 36 collectionImageView.collectionViewLayout = layout 37 } 38 39 40 @IBAction func moveMen(_ sender: UIButton) { 41 42 if pageNum == 2 { 43 UIView.animate(withDuration: 0.2, delay: 0.0, animations: { 44 self.selectedVar.center.x -= 207.0 45 }, completion: nil) 46 pageNum = 1 47 } 48 menButton.setTitleColor(.black, for: .normal) 49 womenButton.setTitleColor(.gray, for: .normal) 50 self.collectionImageView.reloadData() 51 } 52 53 @IBAction func moveWomen(_ sender: UIButton) { 54 if pageNum == 1 { 55 UIView.animate(withDuration: 0.2, delay: 0.0, animations: { 56 self.selectedVar.center.x += 207.0 57 }, completion: nil) 58 pageNum = 2 59 } 60 menButton.setTitleColor(.gray, for: .normal) 61 womenButton.setTitleColor(.black, for: .normal) 62 self.collectionImageView.reloadData() 63 } 64 65 func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize { 66 let horizontalSpace : CGFloat = 0 67 let cellSize : CGFloat = screenWidth / 3 - horizontalSpace 68 return CGSize(width: cellSize, height: imageHeightSize) 69 } 70} 71 72extension HomeViewController: UICollectionViewDataSource, UICollectionViewDelegate,UICollectionViewDelegateFlowLayout { 73 func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { 74 return 18 75 } 76 77 func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { 78 79 switch pageNum { 80 case 1: 81 let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "imageCell", for: indexPath) as! CollectionImageViewCell 82 let img = UIImage(named: "men.png") 83 cell.imageCell.image = img 84 return cell 85 case 2: 86 let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "imageCell", for: indexPath) as! CollectionImageViewCell 87 let img = UIImage(named: "women.png") 88 cell.imageCell.image = img 89 return cell 90 default: 91 let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "imageCell", for: indexPath) as! CollectionImageViewCell 92 let img = UIImage(named: "men.png") 93 cell.imageCell.image = img 94 return cell 95 } 96 97 } 98 99 100 101 102}
customCell
1class CollectionImageViewCell: UICollectionViewCell { 2 3 @IBOutlet weak var imageCell: UIImageView! 4 5 override func awakeFromNib() { 6 super.awakeFromNib() 7 // Initialization code 8 } 9}
CollectionViewのデリゲートメソッドのdidItemSelectAtは記述されていますか?
( https://i-app-tec.com/ios/collectionview-cellselect.html )
質問内容には記述し忘れましたが、しっかり記述した上でも検出されません。
このように記述しています。
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
print("celltappp")
}
なるほど...
ならカスタムしたセルの上にボタンが乗っていたりするとそっちにタップイベントが取られてしまったりするので、その辺りを確認してみてはもらえませんか?
もし可能ならセルのxibなどをスクショで載せてもらえると詳しく回答できるかもしれません。
そのあたりの確認やstoryboard作り直しをしてみたら、解決できました。ありがとうございます。
回答1件
あなたの回答
tips
プレビュー