前提・実現したいこと
以下の2画面があります.
A画面:CollectionViewでCellの背景がgreenとBへのボタン
B画面:CollectionViewでCellの背景が各々違うものが3つ(赤・黄・青)
最初にA画面が開き,B画面へのボタンを押すと,B画面へ移動します.
B画面はモーダル?(全画面表示ではないもの)です.
ここから,
B画面を開いて,3色の内のどれかをタップしてA画面に戻ると
A画面のCellがそのタップした色に変わっているものを作成したいです.
そこで,
Aにて,①Bからcolorを受け取る(初期は緑) ②Cellを表示される際に背景をcolorに設定
Swift
1 func collectionView(_ collectionView: UICollectionView, 2 cellForItemAt indexPath: IndexPath) -> UICollectionViewCell{ 3 let cell:UICollectionViewCell = 4 collectionView.dequeueReusableCell(withReuseIdentifier: "Cell", 5 for: indexPath) 6 let storyboard: UIStoryboard = self.storyboard! 7 let BCV = storyboard.instantiateViewController(withIdentifier: "BCV") as! FashionPageViewController 8 let color:UIColor? = BCV.color 9 10 cell.backgroundColor = color 11 12 return Cell
B にて ①タップされた色をColorに格納 ② A.collectionView.reload()
③ Bを閉じる という動きをしています.
Swift
1 func updataColor(){ 2//格納は違う関数で行っています. 3 4 let storyboard: UIStoryboard = self.storyboard! 5 let AVC = storyboard.instantiateViewController(withIdentifier: "viewA") as! ViewAController 6 7 AVC.collectionView.reloadData() 8 9//閉じるのも違う関数で行っています. 10 }
発生している問題・エラーメッセージ
実行すると
AVC.collectionView.reloadData()で,以下のものが表示されます.
Fatal error: Unexpectedly found nil while implicitly unwrapping an Optional value
該当のソースコード
CollectionViewはA画面のController内にて
Swift
1 @IBOutlet weak var collectionView: UICollectionView!
をアウトレット接続をしています.
文字も緑になります.
試したこと
A画面にて,自身を更新させるのはどうかと思い,
AControllerViewにてもreloadを行ったのですが,結果は同じでした.
(このときは,self.collectionView.reloadData()と書きました)
このとき,
printfでreloadの前で確認したところ,~~変数colorの値の引き渡しはうまくいっていましたが,~~ACVでのviewWillAppearで値をみたら変えられてなかったです.
CollectionView自体がnilになっていました.
viewDidLoad()時点では,CollectionViewは接続されていました.
再接続してもだめで,
A,BCVどちらに書いても文字色は変わりますし,エラーも実行するまで出ません.
回答2件
あなたの回答
tips
プレビュー