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

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

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

TableView(UITableView)とは、リスト形式で表示するコントロールで、ほとんどのアプリに使用されています。画面を「行」に分けて管理し、一般的には各行をタップした際に詳細画面に移動します。

iOS

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

Swift

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

Q&A

2回答

573閲覧

カスタムセルが選択された時の動作について

退会済みユーザー

退会済みユーザー

総合スコア0

TableView

TableView(UITableView)とは、リスト形式で表示するコントロールで、ほとんどのアプリに使用されています。画面を「行」に分けて管理し、一般的には各行をタップした際に詳細画面に移動します。

iOS

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

Swift

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

0グッド

0クリップ

投稿2018/05/17 16:44

前提・実現したいこと

カスタムセル内にある画像を、そのセルがタップされた時に別の画像に変更したいのですが、ビルドしても画像が変わりません。どうすれば良いでしょうか?

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

エラーメッセージ

swift

1 func tableView(_ tableView: UITableView, cellForRowAt IndexPath: IndexPath) -> UITableViewCell { 2 3 4 let cell = tableView.dequeueReusableCell(withIdentifier: "MyCell", for: IndexPath) as! MessageListTableViewCell 5 6 let object = array[IndexPath.row] 7 8 9 if object.imageNumber == 0{ 10 cell.tegamiHyouji.image = #imageLiteral(resourceName: "オレンジ閉.png") 11 }else if object.imageNumber == 1{ 12 cell.tegamiHyouji.image = #imageLiteral(resourceName: "ベージュ閉.png") 13 }else if object.imageNumber == 2{ 14 cell.tegamiHyouji.image = #imageLiteral(resourceName: "黒閉.png") 15 }else if object.imageNumber == 3{ 16 cell.tegamiHyouji.image = #imageLiteral(resourceName: "紫とじ.png") 17 }else if object.imageNumber == 4{ 18 cell.tegamiHyouji.image = #imageLiteral(resourceName: "ブルー閉.png") 19 }else if object.imageNumber == 5{ 20 cell.tegamiHyouji.image = #imageLiteral(resourceName: "肌色とじ.png") 21 }else if object.imageNumber == 6{ 22 cell.tegamiHyouji.image = #imageLiteral(resourceName: "灰色閉.png") 23 }else if object.imageNumber == 7{ 24 cell.tegamiHyouji.image = #imageLiteral(resourceName: "ダーク閉じ.png") 25 }else if object.imageNumber == 8{ 26 cell.tegamiHyouji.image = #imageLiteral(resourceName: "レッド閉.png") 27 }else if object.imageNumber == 9{ 28 cell.tegamiHyouji.image = #imageLiteral(resourceName: "緑閉.png") 29 } 30 31 func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 32 let cell = tableView.cellForRow(at: IndexPath) 33 34 ・・ここで変更したい 35 36 if cell.tegamiHyouji.image == #imageLiteral(resourceName: "オレンジ閉.png"){ 37 cell.tegamiHyouji.image = #imageLiteral(resourceName: "オレンジ2.png") 38 }else if cell.tegamiHyouji.image == #imageLiteral(resourceName: "ベージュ閉.png"){ 39 cell.tegamiHyouji.image = #imageLiteral(resourceName: "ベージュ2.png") 40 }else if cell.tegamiHyouji.image == #imageLiteral(resourceName: "黒閉.png"){ 41 cell.tegamiHyouji.image = #imageLiteral(resourceName: "黒2.png") 42 }else if cell.tegamiHyouji.image == #imageLiteral(resourceName: "紫とじ.png"){ 43 cell.tegamiHyouji.image = #imageLiteral(resourceName: "紫2.png") 44 }else if cell.tegamiHyouji.image == #imageLiteral(resourceName: "ブルー閉.png"){ 45 cell.tegamiHyouji.image = #imageLiteral(resourceName: "ブルー2.png") 46 }else if cell.tegamiHyouji.image == #imageLiteral(resourceName: "肌色とじ.png"){ 47 cell.tegamiHyouji.image = #imageLiteral(resourceName: "肌色2.png") 48 }else if cell.tegamiHyouji.image == #imageLiteral(resourceName: "灰色閉.png"){ 49 cell.tegamiHyouji.image = #imageLiteral(resourceName: "グレー2.png") 50 }else if cell.tegamiHyouji.image == #imageLiteral(resourceName: "ダーク閉じ.png"){ 51 cell.tegamiHyouji.image = #imageLiteral(resourceName: "ダーク2.png") 52 }else if cell.tegamiHyouji.image == #imageLiteral(resourceName: "レッド閉.png"){ 53 cell.tegamiHyouji.image = #imageLiteral(resourceName: "アートボード 4.png") 54 }else if cell.tegamiHyouji.image == #imageLiteral(resourceName: "緑閉.png"){ 55 cell.tegamiHyouji.image = #imageLiteral(resourceName: "深緑2.png") 56 } 57 return cell 58 } 59 60 61 return cell 62 }
ソースコード

試したこと

ここに問題に対して試したことを記載してください。

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

ここにより詳細な情報を記載してください。

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

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

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

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

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

guest

回答2

0

画像を管理クラス等を考えてみるのがスッキリすると思います。

例としてenumを使ってみたパターンを以下に書きます。

swift

1enum ImageType: Int { 2 case imageNumber0 3 case imageNumber1 4 case imageNumber2 5 case imageNumber3 6 case imageNumber4 7 case imageNumber5 8 case imageNumber6 9 case imageNumber7 10 case imageNumber8 11 case imageNumber9 12 case imageNumber10 13 case imageNumber11 14 case imageNumber12 15 case imageNumber13 16 case imageNumber14 17 case imageNumber15 18 case imageNumber16 19 case imageNumber17 20 case imageNumber18 21 case imageNumber19 22 23 var image: UIImage { 24 switch self { 25 case .imageNumber0: return #imageLiteral(resourceName: "オレンジ閉.png") 26 case .imageNumber1: return #imageLiteral(resourceName: "ベージュ閉.png") 27 case .imageNumber2: return #imageLiteral(resourceName: "黒閉.png") 28 case .imageNumber3: return #imageLiteral(resourceName: "紫とじ.png") 29 case .imageNumber4: return #imageLiteral(resourceName: "ブルー閉.png") 30 case .imageNumber5: return #imageLiteral(resourceName: "肌色とじ.png") 31 case .imageNumber6: return #imageLiteral(resourceName: "灰色閉.png") 32 case .imageNumber7: return #imageLiteral(resourceName: "ダーク閉じ.png") 33 case .imageNumber8: return #imageLiteral(resourceName: "レッド閉.png") 34 case .imageNumber9: return #imageLiteral(resourceName: "緑閉.png") 35 case .imageNumber10: return #imageLiteral(resourceName: "オレンジ2.png") 36 case .imageNumber11: return #imageLiteral(resourceName: "ベージュ2.png") 37 case .imageNumber12: return #imageLiteral(resourceName: "黒2.png") 38 case .imageNumber13: return #imageLiteral(resourceName: "紫2.png") 39 case .imageNumber14: return #imageLiteral(resourceName: "ブルー2.png") 40 case .imageNumber15: return #imageLiteral(resourceName: "肌色2.png") 41 case .imageNumber16: return #imageLiteral(resourceName: "グレー2.png") 42 case .imageNumber17: return #imageLiteral(resourceName: "ダーク2.png") 43 case .imageNumber18: return #imageLiteral(resourceName: "アートボード 4.png") 44 case .imageNumber19: return #imageLiteral(resourceName: "深緑2.png") 45 } 46 } 47 48 mutating func changeImage() { 49 switch self { 50 case .imageNumber0: return self = .imageNumber10 51 case .imageNumber1: return self = .imageNumber11 52 case .imageNumber2: return self = .imageNumber12 53 case .imageNumber3: return self = .imageNumber13 54 case .imageNumber4: return self = .imageNumber14 55 case .imageNumber5: return self = .imageNumber15 56 case .imageNumber6: return self = .imageNumber16 57 case .imageNumber7: return self = .imageNumber17 58 case .imageNumber8: return self = .imageNumber18 59 case .imageNumber9: return self = .imageNumber19 60 default: break 61 } 62 } 63} 64

写真の配列をenumの配列として定義します。

swift

1 2var array: [ImageType] = [.imageNumber0, .imageNumber1, .imageNumber2, .imageNumber3, .imageNumber4, .imageNumber5, .imageNumber6, .imageNumber7, .imageNumber8, .imageNumber9]

TableViewのメソッド部分はスッキリします。

swift

1func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 2 3 if let cell = tableView.dequeueReusableCell(withIdentifier: "MyCell", for: IndexPath) as? MessageListTableViewCell { 4 cell.tegamiHyouji.image = array[indexPath.row].image 5 } 6 return UITableViewCell() 7} 8 9// セル選択時 10func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 11 // 画像を変更 12 array[indexPath.row].changeImage() 13 tableView.reloadData() 14}

投稿2018/05/19 01:25

_Kentarou

総合スコア8490

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

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

0

タップされたセルの画像の変更を、cellForRowAtではなく、didSelectRowAtのなかで行えば良いのかと思いますがどうでしょうか?

swift

1func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 2    // タップされたCellのindexpathが渡されてくるので、そこからcellを特定して画像を変更する。 3    let cell = tableView.cellForRow(at:indexPath) 4     5    if cell.tegamiHyouji.image == #imageLiteral(resourceName: "オレンジ閉.png"){ 6 cell.tegamiHyouji.image = #imageLiteral(resourceName: "オレンジ2.png") 7 }else if cell.tegamiHyouji.image == #imageLiteral(resourceName: "ベージュ閉.png") 8 .... 9 10 11 // 戻り値無いのでreturnいらない。 12 tableView.reloadData()

投稿2018/05/17 17:10

編集2018/05/17 17:15
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問