質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.48%
iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Swift

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

Q&A

解決済

1回答

1524閲覧

セルをタップした時にセルに表示されている番号をラベルに表示することができません。

yamaji1108

総合スコア19

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Swift

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

0グッド

0クリップ

投稿2019/08/10 08:15

前提・実現したいこと

初学者です。周りに頼れる人もおらず初めて投稿させていただきました。

collection viewのセルをタップ(選択)した時に、セルの番号を、画面上部のラベル(resultLabel)に表示させたいです。

画面キャプチャ
イメージ説明

発生している問題・エラーメッセージ

実際にセルをタップしても、下記のソースコードの関数 collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) が呼び出されません。

該当のソースコード

// // View2ViewController.swift // insuubunkai // // Created by 山田 on 2019/08/01. // Copyright © 2019 山田. All rights reserved. // import UIKit class View2ViewController: UIViewController, UICollectionViewDataSource, UICollectionViewDelegate,UICollectionViewDelegateFlowLayout { @IBOutlet weak var resultLabel: UILabel! @IBOutlet weak var CollectionView1: UICollectionView! override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view. } func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { return 12 // 表示するセルの数 } func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { let cell = collectionView.dequeueReusableCell( withReuseIdentifier: "Cell", for: indexPath) // 表示するセルを登録(先程命名した"Cell") //セルの背景色をランダムに設定する。 cell.backgroundColor = UIColor(red: CGFloat(drand48()), green: CGFloat(drand48()), blue: CGFloat(drand48()), alpha: 1.0) let cellButton1 = cell.contentView.viewWithTag(1) as! UIButton cellButton1.setTitle(String(indexPath.row + 1), for: .normal) cellButton1.setTitleColor(UIColor.white, for: .normal) return cell } func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) { resultLabel.text = String(indexPath.row) } /* // MARK: - Navigation // In a storyboard-based application, you will often want to do a little preparation before navigation override func prepare(for segue: UIStoryboardSegue, sender: Any?) { // Get the new view controller using segue.destination. // Pass the selected object to the new view controller. } */ }

試したこと

resultLabel.text = String(indexPath.row)
の代わりに
print("関数が呼び出されました")
等に書き換えても、デバッグエリアでの出力は確認出来ませんでした。

下記のサイト等を参考にしております。
https://i-app-tec.com/ios/collectionview-cellselect.html
http://simple-life777.hatenablog.com/entry/2019/01/22/CollectionView%E3%81%AE%E4%BD%BF%E3%81%84%E6%96%B9

補足情報(FW/ツールのバージョンなど)

XcodeのバージョンはVersion 10.2.1 (10E1001)です。

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

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

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

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

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

guest

回答1

0

ベストアンサー

collectionViewのdelegateが設定されていないからではないでしょうか?

viewDidLoadで設定してみてください。

Swift

1override func viewDidLoad() { 2 super.viewDidLoad() 3 4 // collectionViewのdelegateを設定 5 CollectionView1.delegate = self 6}

投稿2019/08/10 09:40

hayabusabusash

総合スコア767

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

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

yamaji1108

2019/08/10 11:39

早速のコメント、誠にありがとうございます。 ご教授頂いた通り、viewDidLoad内でdelegateの設定の記述をしましたが、現象は変わらない状況です。。
hayabusabusash

2019/08/10 11:41

ご確認ありがとうございます! これよくみたらdataSourceの設定もしていませんね。 以下も同じ位置に追加してみてくれませんか? CollectionView1.dataSource = self
yamaji1108

2019/08/10 13:00

いつも、ありがとうございます! ご教授頂いた、dataSourceの1文も加えましたが、現象は変わりませんでした。。 一応こちらのサイトを参考にしながら、view controllerとdelegate・datasourceの紐付け作業を行いました。 https://i-app-tec.com/ios/collectionview.html セルの上にボタンを配置しているのですが、セルの選択ではなくボタンの押下となってしまって、関数がよばれないのか、とも思ってます。 全然違っていたらすみません。
hayabusabusash

2019/08/10 13:15

あ、それかもしれませんね。 おっしゃる通りボタンのタップイベントになってしまっている気がします。 一応ボタンを消してみて確認していただけますか? あともしdelegateやdataStoreの設定はStoryboardからしているならコードでする必要なかったですね。 その場合は消してしまって問題ないです。失礼いたしました。
yamaji1108

2019/08/10 13:50

お忙しい中、いつもありがとうございます! ボタンを消して、ラベルに直したところ、無事、resultLabelに数字を表示することが出来ました! 数字表示だけなら、ボタンで実装する必要はなかったんですね。 大変お世話になりましたm(_ _)m
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問