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

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

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

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

Swift

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

Q&A

解決済

1回答

1369閲覧

子VCから親VCへのデータ移行

midori0822

総合スコア61

Xcode

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

Swift

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

0グッド

2クリップ

投稿2018/04/24 12:59

こんにちは。
親VC上においた子VC(containerView)からのデータを戻す動作についての質問です。
子VCはEmbed SegueでpageViewControllerに繋ぎ、3ページのcollectionViewを表示させました。
これらの中にあるcollectionViewCellにはUIImageViewにより画像が表示されています。
cellをタップすると親VCへ、どの画像がタップされたのかを伝えたいです。

親VCにUIImageの情報はあるのでタップされた画像の名前(String)だけ送ることができればイイのですが、そのやり方がどのサイトをみてもいまいちわかりません。
解決法が分かる方、ご回答お待ちしております。

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

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

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

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

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

guest

回答1

0

ベストアンサー

親VCにファイル名を保持する変数を持ちタップ時に渡してあげるのはいかがでしょうか?
ContainerViewなので下記の方法で親VCが参照できると思います。

if let vc = self.parent as? 親VC { // 親VCにfileNameという変数を宣言しているとします。 vc.fileName = "ファイル名" }

【追記】Delegateを使う方法

// 子VC protocol ChildViewControllerDelegate: class { func getFileName(fileName: String) } import UIKit class ChildViewController: UIViewController { weak var delegate: ChildViewControllerDelegate? // 例えばボタンを押した時にファイル名を取得する @IBAction func buttonTapped(_ sender: UIButton) { let fileName = ... // 何かしらの方法でファイル名を取得 delegate?.getFileName(fileName: fileName) } }
// 親VC import UIKit class ParentViewController: UIViewController , ChildViewControllerDelegate{ var child: ChildViewController! override func viewDidLoad() { super.viewDidLoad() child = self.childViewControllers[0] as! ChildViewController child.delegate = self } // ChildViewControllerDelegateのメソッド func getFileName(fileName: String) { // 取得したファイル名に対する処理 } }

投稿2018/04/24 23:34

編集2018/04/27 21:30
newmt

総合スコア1277

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

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

midori0822

2018/04/25 09:56

理解が悪くてゴメンナサイ… 他のサイトでも観たのですがself.parentとは何を指しているのでしょうか?
newmt

2018/04/25 10:50

selfが子VCで、そのparentが親VCになります。
midori0822

2018/04/27 11:50

親vcはviewControllerです。 collectionView内のdidSelectItemメソッドで試しに以下のコードを打ち込んでみたのですが{ }のみ実行されません。 なぜでしょうか。imageNameは子vc内の変数です。 if let vc: ViewController = self.parent as? ViewController { vc.array.append(imageName) }
退会済みユーザー

退会済みユーザー

2018/04/27 18:30 編集

~~横からすみません。~~ ↓のようにすると問題点の特定に役立つかもしれませんよ。 if let vc: ViewController = self.parent as? ViewController { print("pre-vc.array:",vc.array) print("imageName:",imageName) vc.array.append(imageName) print("post-vc.array:",vc.array) } 通ったか、通ってないか、通ってないならvcがnil~~
midori0822

2018/04/27 17:15

>tyobigoro様 コメントありがとうございます。 打ち込んでみて、breakpointをおいても{}内を通らないので確認できません…
退会済みユーザー

退会済みユーザー

2018/04/28 03:50 編集

横からいらんことを書いてしまってすいません。 breakpointおいてたってことは、通らないってことで、imageNameの中身がないとかじゃないんですね。 通らないってことは、通ってないならvcがnilってことですよね。 newmtさんの回答は「if vc」で、mirori0822さんのコメントは「if let vc」ですがその辺は大丈夫でしょうか〜。 if vc を let vc と寝ぼけてて見間違えて、if vc って書いてましたごめんんさない。
newmt

2018/04/27 21:31 編集

letは書き漏れでした申し訳ございません。 ViewController ↑ これはUIViewControllerのサブクラスを作成した独自クラスでしょうか? self.parentの型は何になっていますでしょうか? また取得できないようでしたら回答にDelagateを使用する方法を追記しましたので、そちらを試してみたらいかがでしょうか?
midori0822

2018/04/28 03:07

>tyobigoro様 おそらくif let vcで問題ないようです!返信ありがとうございます。 >newmt様 parentの型はUIViewControllerになっています。 早い話が以下のコードで作成した関係になります。 http://mypace1981.doorblog.jp/archives/49745841.html Delegateの方法の記載ありがとうございます! 一度試してみます。
newmt

2018/04/28 03:48 編集

self.parent.parentとself.parentViewControllerで何か出力されますでしょうか? 上記のサイトを見てみる限り self.parent -> UIPageViewController self.parent.parent -> ViewController になるのかなと思ったのですが。
midori0822

2018/04/28 04:14

newmt様の言う通り、 self.parent -> UIPageViewController self.parent.parent -> ViewController と表示されました。
newmt

2018/04/28 04:47

if let vc = self.parent.parent as? ViewController { } とやると{}内に入ることができませんでしょうか?
midori0822

2018/04/28 04:54 編集

parent?.parentにし、{}内にbreakpointを置くと無事止まってくれました! viewControllerにつなげるためには確かにparent.parentでした… 細かい処理はこれから記述します。 ひとまずこの質問は解決しました。ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問