Serviceを読んで理解し、同意したものとみなします。スタック・オーバーフローはプログラマーとプログラミングに熱心な人のためのQ&Aサイトです。358件0現在コレクションビューでリストアプリを作っています。セルをクリックした遷移先(inputViewController)で入力した情報を、コレクションビューのセル上のラベルに表示したいのですが、入力した情報が全てのセルに反映されてしまい困っています。遷移先のテキストフィールドで取得した日時を遷移元(viewContoroller)に表示したいです。画面の遷移はstoryboad上のsegueにて、コレクションビューセルからinputviewcontrollerに繋いでいます。選択されたセル毎に反映させる方法をご存知でしたら教えていただけたら嬉しいです。質問なので不慣れな点もあるかと思いますがどうかご教示のほどお願いいたします。個の銅バッジ1「セルをクリックした遷移先で入力」とあるのに、どのように遷移させているのかも、何かの入力をするコードも提示していただいてないようです。そこら辺のやり方がおかしいから期待した動作になっていないと思われるので、必要な情報を追記して下さい。ご自身の質問は「編集」で修正することができます。21:28ご指摘どうもありがとうございます!修正いたしました。11:58ご質問内容の修正ありがとうございました。根本的な問題は、セルはいくつも表示されるのに、表示用のデータを保持しているtext1が1つしかない点です。あなたのコードはそれ以外にも大きな問題点(Finishで元の画面に戻らず、新しい画面に遷移してしまっている)があって、ちょっと回答の形で書くには時間がかかりそうです。20:47ありがとうございます。finishのところの遷移もおかしかったのですね...調べてみたところこちらは自力で直せそうです。簡単にでいいのでヒントをいただけるととてもうれしいです。6:15「方向性」としては間違っていません>「text1を配列にする」。toDosと合わせて、2つ(cellに表示するものが増えていけばもっと?)の配列を別々に持とうと思っているのであれば、それはお勧めしませんが。viewのcellに反映されるようにするのにも一工夫要ります。回答が出来上がるまでにご自身でも試されることと思いますが、finishButtonの解決を含めて注意深く進めていって下さい。票0※ご自身でも色々試されているかもしれませんが、以下の説明・コードはご質問本文中のコードを前提に書かれています。長文ですが、その点にもご留意して最後まで見ていって下さい。コメントに示したようにtext1(日付を表示する部分でしょうからもっと適切な名前をつけましょう)はセルの数だけ用意されていませんから、「セル毎に反映させる」ためにはセルごとに異なる情報はセルの数だけ用意すべきでしょう。コメントに書いたようにバラバラの配列をたくさん持つことはお勧めできません。セル表示用(もっと他の用途にも使って構いませんが)にデータ型を定義しておくべきでしょう。ViewController.swiftの最初の方にでも、以下のデータ型宣言を追加して下さい。//画像、背景色...}本当は日付を表すのにString型を使うといろいろ難しいことが出てくるので、Date型などに変えておきたいところですが、問題の解決に本質的でない部分の修正は避けておきます。「選択されたセル毎に反映させる」だけでも、まだまだ修正が必要なので...。して、現在のtext1とtoDosの代わりに以下のような配列を保持しておきます。]collectionView(_:cellForItemAt:)の実装は、それに合わせて少し書き換えてやります。}で、ここまではまだ大したことはないんですが、「セル毎に反映させる」だけでも、まだまだ考えないといけないことがあります。InputViewController(現在はinputViewControllerになっているかもしれませんが、Swiftでは「型名は大文字で始める」と言う大変よく守られているルールがあるので、以下InputViewControllerで統一しておきます。)でテキストの編集が終わった後、(適切なインスタンスの)todosの適切なインデックスのdateStringを書き換えないといけない。todosの中身を書き換えたら、UICollectionViewのreload系メソッドを呼んでやらないと、変更を確実に表示に反映させることができないと言うわけで、せっかく配列をちゃんと作ってもInputViewControllerは配列のインデックスもわかっていません...。この辺のことを、元のViewController側に丸投げするためには、デリゲートパターンなんてものがよく使われます。(delegateを動詞で使うと、「委任する」「委譲する」あたりの意味になりますが、場面によっては「丸投げする」の方が近いでしょう...。)InputViewController.swiftの中にでも、次のようなプロトコルを追加してやります。String?)}(textは日付を表していることが命名に反映されていませんが、長くなりすぎるので...。)InputViewControllerの中には上記のプロトコル型のdelegateプロパティを追加します。//...}後は、編集が完了した後の処理をこのdelegateに丸投げするようにfinishButton(_:)の処理を書き換えてやります。}(元コードからUINavigationControllerを使っているものと推測してます。違うなら、「元の画面に戻る」処理は変更しないといけませんが、決して「新しい画面を表示する」ようなコードにしてはいけません。UINavigationControllerを使っているなら「戻る」ボタンが表示されるかと思いますが、話を単純にするため、そっちはキャンセル扱いで何もしないことにしておきます。}ここまででも解説を挟みながらだとそこそこの長さになってしまいましたが、ここまでの修正を入れてもInputViewControllerでの編集結果は全く元の画面に反映されません、delegateに丸投げしているのに、「俺が丸投げされてやる」と、誰かがdelegateを引き受けてやる部分がないからです。InputViewControllerへの画面遷移の際にdelegateを設定してやるそのdelegateに必要なメソッドを実装してやると言う部分が必要になります。上記1点目、セルから直接セグエを引いてしまっているので、prepare(for:sender:)メソッドの中でやらせることになるでしょう。該当のセグエには、Identifierを以下のコードと整合するように(ToInput)付けておいて下さい。delegate役はViewControllerにやらせるので、以下はViewControllerクラスに追加することになります。selfにエラーが表示されるはずですが、ViewControllerがInputViewControllerDelegateに適合していないせいなので、クラス宣言の後ろにこんな宣言を付け加えてやります。}}さてずいぶん長くなってしまいましたが、これでも「選択されたセル毎に反映」するのに必要な事柄以外はほとんど無視したつもりです。お試しの上、うまくいかない点、わかりにくい点があればお知らせください。個の銅バッジ丁寧に解説してくださりありがとうございます。試してみたところ、エラーは一切出なかったのですがなぜかfinishButton(_:)で前の画面に戻る事が出来ませんでした。ボタンを押下した感じはあるのですが遷移だけしないです。画面はviewControllerにnavigationbarを追加して使っています。何かおかしなところがあれば教えていただけたら嬉しいです。さん、ご報告ありがとうございます。私が「推測」したのとはプロジェクトの設定が異なるようです。「画面はviewControllerにnavigationbarを追加して」と言うだけですとやり方は色々あるので、情報としてはやや不十分です。storyboardの設定内容がわかるようなスクリーンショットをご質問中に含めていただくと、もう少し確実なことが言えるかもしれません。確認のために、print(self.navigationController,self.presentingViewController)なんて文をfinishButton(_:)メソッドの最初にでも付け加えて、Finishを押した時に何が出力されるか見てみて下さい。その出力を見ればもう少し詳しいことがわかる場合があります。10:52いろいろ説明不足でお手間を取らせてしまい申し訳ないです・・・。質問にコントローラーのスクショを追加いたしました。さん、情報の追加ありがとうございます。Modallyを使っていて、UINavigationController内での遷移にはなっていなかったようですね。回答にfinishButton(_:)の修正版を追加しましたので、お試しください。16:33OOPerさん、修正版どうもありがとうございます。試してみたところ無事に前の画面に遷移する事が出来ました!が、しかし値渡しができませんでした。質問の最後に現在のコードを追加したので何か足りない点があれば教えて頂けたら嬉しいです。回答スタック・オーバーフローに参加してくれて、ありがとうございます!質問の回答を共有してください。回答を説明し、自分の検討結果も共有してください。意見を述べること(意見を述べるなら、参照リソース、自分の経験で意見をサポートしてください)さらにサポートが必要な場合このヘルプを参考してください。“回答を投稿”をクリックすることで利用規約、プライバシーポリシー、及びクッキーポリシーに同意したものとみなされます。タグが付いた他の質問を参照するか、自分で質問をする。関連する質問0StoryBoardで配置したUICollectionViewのサイズ動的変更について0CollectionViewのカスタムセルに何も表示ができない3collectionViewで選択された写真に番号を振りたい1storyboardの遷移でエラーが出ます。(segueを使用しない方法で実装)0collectionViewをスクロールするとcellのsubviewが別のcellに移動する0CollectionViewの非同期処理0UITableViewの動的更新0UICollectionViewControllerのCellにUIImageViewが表示されない。質問のフィードこのRSSフィードを購読するには、このURLをコピーしてRSSリーダーに貼り付けてください。