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

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

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

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

Swift

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

Q&A

解決済

1回答

7932閲覧

collectionView セルの更新

hikarin

総合スコア24

Xcode

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

Swift

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

0グッド

0クリップ

投稿2016/11/29 13:16

collectionviewのセルから遷移した画面でボタンを押すとセルの画像が変わる、というものを作りたいと思っています。
現在画像を保存している配列の中身を変えるところまでは出来るようになったのですが配列の中身が変わっただけでセルの画像は変わりません。(再起動後にcollectionviewを開くと変わっています)
セルの画像を表示するのがcollectionviewを開いた最初一回のみなので再起動後にしか画像が変わらないのだと思います。
セルの更新というのがあるようなのですがよくわからないので教えてもらえると助かります。

※知識不足なためコードがとてもわかりづらくなってます
UserDefaultsにstringや直接配列を入れたかったのですがうまくいかず、数字のみを受け渡してそこから数字によって配列の中身を変えるようにしています。
遷移した先でボタンを押すとimageの数字が0から1に変わり、collectionviewに戻った時1になっていたら配列の中身が変わるというものにしています。
if image1 == 1{
imageNames2[0] = "xyz.jpg"
}
の中に更新するものを入れることができればうまくいくのではないかと思っています。

import UIKit class ViewController: UIViewController ,UICollectionViewDataSource, UICollectionViewDelegate { let photos:Array<String> = ["1","2"] var imageNames2:[String] = ["abc.jpg","abc.jpg"] var image1 = 0 var image2 = 0 override func viewDidLoad() { super.viewDidLoad() } func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell{ let testCell:UICollectionViewCell = collectionView.dequeueReusableCell(withReuseIdentifier: "Cell", for: indexPath) let imageView = testCell.contentView.viewWithTag(1) as! UIImageView let cellImage = UIImage(named: imageNames2[(indexPath as NSIndexPath).row]) imageView.image = cellImage let label = testCell.contentView.viewWithTag(2) as! UILabel label.text = photos[(indexPath as NSIndexPath).row] return testCell } func numberOfSections(in collectionView: UICollectionView) -> Int { return 1 } func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { return photos.count; } func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) { if (indexPath as NSIndexPath).row == 0 { performSegue(withIdentifier: "vc0", sender: nil) } else if indexPath.row == 1 { performSegue(withIdentifier: "vc1", sender: nil) } } override func viewWillAppear(_ animated: Bool) { super.viewDidLoad() let image1 = UserDefaults.standard.integer(forKey: "image1") if image1 == 1{ imageNames2[0] = "xyz.jpg" } let image2 = UserDefaults.standard.integer(forKey: "image2") if image2 == 1{ imageNames2[1] = "xyz.jpg" } } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() } }

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

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

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

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

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

guest

回答1

0

ベストアンサー

collectionViewの更新にはreloadData()というメソッドを呼び出します。

最初にStoryboardColletionViewが配置してあると思いますので以下の様に@IBOutletを結んでください。

swift

1@IBOutlet weak var collectionView: UICollectionView!

そしてviewWillAppearの以下の部分にコードを付け足してみて実行してみてください。

swift

1override func viewWillAppear(_ animated: Bool) { 2 super.viewDidLoad() 3 4 let image1 = UserDefaults.standard.integer(forKey: "image1") 5 if image1 == 1{ 6 imageNames2[0] = "xyz.jpg" 7 } 8 9 let image2 = UserDefaults.standard.integer(forKey: "image2") 10 if image2 == 1{ 11 imageNames2[1] = "xyz.jpg" 12 } 13 14 // ↓以下のコードを追加 15 collectionView.reloadData() 16}

投稿2016/11/29 13:41

編集2016/11/29 14:03
_Kentarou

総合スコア8490

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

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

hikarin

2016/11/29 14:35

いつも早い回答ありがとうございます。 無事解決することができました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問