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

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

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

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

Swift

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

Q&A

解決済

1回答

980閲覧

XcodeでcollectionViewのセルタップ時に送られるデータが1個前にタップされたセルのデータになる。

shuyaaa

総合スコア22

Xcode

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

Swift

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

0グッド

0クリップ

投稿2019/02/03 16:16

編集2019/02/03 16:41

ViewControllerにcollectionViewを配置して特定のcellがタップされると設定したSegueにより他のViewControllerに遷移し、タップされたcellのデータが遷移先のViewControllerに投げるように作成しています。
以下の2つの関数(「データを格納する関数」と「遷移先のViewControllerにデータを渡す関数」)によりデータ自体は遷移先に送られていますが、「遷移先のViewControllerにデータを渡す関数」の何かしらの間違いにより初めてのタップ時には何もデータが送られなく、2回目以降のタップ時には1個前にタップしたセルのデータが送られてしまいます。この問題を解決する方法がありましたらよろしくお願いします。

以下2つの関数は同じclass(mainViewController.swift)にあります。
データを格納する関数

Swift

1func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) { 2//省略 3 self.give_indexPath = String(indexPath.row) 4 self.give_day = self.set_class_comma[indexPath.row] 5 self.performSegue(withIdentifier: "new_class", sender: nil) 6 7 8 9 }

遷移先のViewControllerにデータを渡す関数

Swift

1override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 2 if segue.identifier == "new_class" { 3 let vc = segue.destination as! new_class_ViewController 4 vc.receive_indexPath = self.give_indexPath 5 vc.receive_day = self.give_day 6 7 } 8 }

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

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

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

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

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

guest

回答1

0

ベストアンサー

おそらく、Storyboardでsegueの接続をする時にセルから青い線を引っ張って次の画面に接続しているのではないかと思います。その場合は、didSelectItemAtのメソッドが呼ばれる前に、セルのタップで自動的に画面遷移します。
(didSelectItemAtは画面遷移後に呼ばれます。)

今の設計は、セルをタップしたらdidSelectItemAtを呼び出してもらい、その処理の中でperformSegueすることで次の画面に遷移するようにしていますから、セルのタップで勝手に画面遷移しないようにする必要があります。

その場合は、セルから青い線を引っ張るのではなく、ViewControllerの黄色いアイコンから青い線を引っ張る必要があります。ViewControllerからsegueの接続をすれば、performSegueをしない限り自動的に画面遷移することはありません。

投稿2019/02/03 16:42

TakeOne

総合スコア6299

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

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

shuyaaa

2019/02/03 16:47

ご返信ありがとうございます。 ご回答通りにしたところ望んでいる動きになりました。 私の拙い質問から解決策を考えていただきありがとうございます。 セルとviewcontrollerからのsegueの引っ張り方の違いで挙動が変わるとは知らなくとても勉強になりました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問