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

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

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

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

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

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

Q&A

解決済

1回答

746閲覧

UICollectionCellViewをタップ時に色が変わるようにしたい

退会済みユーザー

退会済みユーザー

総合スコア0

iOS

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

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

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

0グッド

0クリップ

投稿2018/03/01 01:36

cellをタップした時にそのcellの色を変わるようにしたんですが、うまく行かないのですがなんででしょうか。また、どう直せばいいのか教えて欲しいです。

ViewControl.swift

1...省略... 2func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) { 3 let cell : CustomUICollectionViewCell = collectionView.dequeueReusableCell(withReuseIdentifier: "MyCell", for: indexPath) as! CustomUICollectionViewCell 4 cell.image.backgroundColor = UIColor.red 5 print("Num: (indexPath.row)") 6 usePhoto = indexPath.row 7 8 9 10 11 } 12 13 func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { 14 return icon.count 15 } 16 17 func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { 18 let cell : CustomUICollectionViewCell = collectionView.dequeueReusableCell(withReuseIdentifier: "MyCell", for: indexPath) as! CustomUICollectionViewCell 19 cell.image.image = icon[indexPath.row] 20 return cell 21 }

CustomUICollectionViewCell.swift

1import UIKit 2 3class CustomUICollectionViewCell: UICollectionViewCell { 4 var image = UIImageView() 5 var myview = UIView() 6 required init(coder aDecoder: NSCoder) { 7 super.init(coder: aDecoder)! 8 } 9 10 override init(frame: CGRect) { 11 super.init(frame: frame) 12 13 14 image = UIImageView(frame: CGRect(x:0, y:0, width:frame.width, height:frame.height)) 15 myview = UIImageView(frame: CGRect(x:0, y:0, width:frame.width, height:frame.height)) 16 image.backgroundColor = UIColor.clear 17 //myview.backgroundColor = UIColor.red 18 self.contentView.addSubview(myview) 19 self.contentView.addSubview(image) 20 } 21 22 23}

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

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

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

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

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

fuzzball

2018/03/01 01:56

「うまく行かない」とは?
退会済みユーザー

退会済みユーザー

2018/03/01 03:15

色が変わらないです。
guest

回答1

0

ベストアンサー

とりあえず、

swift

1cell.contentView.backgroundColor = .red

で色は変わると思います。

あとは、「セルの再利用」について調べて下さい。

セルの取得

セルの取得方法が間違っています。

swift

1if let cell = collectionView.cellForItem(at: indexPath) { 2 cell.contentView.backgroundColor = .red 3}

投稿2018/03/01 01:59

編集2018/03/01 03:46
fuzzball

総合スコア16731

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

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

退会済みユーザー

退会済みユーザー

2018/03/01 03:19

変わらなかったです。
fuzzball

2018/03/01 03:42

セルの取得方法について追記しました。
退会済みユーザー

退会済みユーザー

2018/03/01 04:44

できました。ありがとうございます。 しかし、再利用の仕組みがよくわからないです。 タップしていないセルが反応したりします。
fuzzball

2018/03/01 04:55

画面外に出たセルは(画面外に出たときの状態のまま)再利用されます。 今回の場合だと、背景色が赤い状態で画面外に出たセルは、dequeueReusableCell(withReuseIdentifier:for:)でセルを取得したとき、すでに背景色が赤い状態、ということです。 これを解決するには、 ・全セルの背景色の状態を保持するための変数(配列など)を用意する。 ・collectionView(_:didSelectItemAt:)の中では、上記変数を変更し、セルを更新(リロード)する。 ・collectionView(_:cellForItemAt:)の中では、上記変数を参照してセルの背景色を設定する。 という流れになります。 UITableViewも同じ仕組みなので、そちらで探した方が多くの記事が見つかるのではないかと思います。
退会済みユーザー

退会済みユーザー

2018/03/02 00:54

できました。ご丁寧にありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問