🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

解決済

1回答

748閲覧

collectionViewCellのタップ判定ができません

Fuyan777

総合スコア12

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

0クリップ

投稿2019/10/06 08:58

前提・実現したいこと

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}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Fuyan777

2019/10/06 10:54

質問内容には記述し忘れましたが、しっかり記述した上でも検出されません。 このように記述しています。 func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) { print("celltappp") }
hayabusabusash

2019/10/06 11:01

なるほど... ならカスタムしたセルの上にボタンが乗っていたりするとそっちにタップイベントが取られてしまったりするので、その辺りを確認してみてはもらえませんか? もし可能ならセルのxibなどをスクショで載せてもらえると詳しく回答できるかもしれません。
Fuyan777

2019/10/06 11:23

そのあたりの確認やstoryboard作り直しをしてみたら、解決できました。ありがとうございます。
guest

回答1

0

自己解決

storyboardで作り直すとできました。

投稿2019/10/06 11:23

Fuyan777

総合スコア12

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問