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

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

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

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Swift

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

iPhone

iPhoneとは、アップル社が開発・販売しているスマートフォンです。 同社のデジタルオーディオプレーヤーiPodの機能、電話機能、インターネットやメールなどのWeb通信機能の3つをドッキングした機器です。

Q&A

解決済

1回答

1818閲覧

dismiss UINavigationController and pass data

ringotubame

総合スコア21

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Swift

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

iPhone

iPhoneとは、アップル社が開発・販売しているスマートフォンです。 同社のデジタルオーディオプレーヤーiPodの機能、電話機能、インターネットやメールなどのWeb通信機能の3つをドッキングした機器です。

0グッド

0クリップ

投稿2017/05/13 18:22

編集2017/05/14 02:24

NavigationController に管理されている画面(AddViewController)から NavigationController に管理されていない HomeListViewController に戻るときに値を渡したい。

// ストーリーボードの様子
HomeListViewController → NavigationController → AddViewController

###発生している問題・エラーメッセージ

AddVC の saveBtn を押し homeVC へ戻るときに、home の tableview 更新のための値を渡せない。
いろいろためしたが 遷移先の homeVC がなぜか取得できない。

###該当のソースコード

// HomeListViewController.swift
@IBAction func addNewCell(_ sender: Any) {

// 1. let sb = UIStoryboard(name: "Main", bundle: nil) let navi = sb.instantiateViewController(withIdentifier: "naviToAdd") as! UINavigationController let addVC = navi.topViewController as! AddViewController // 2. データ引き渡し addVC.wordTextFieldStr = "" addVC.bodyStr = "" // 3. 遷移 present(navi, animated: true, completion: nil)

}

// AddViewController.swift
@IBAction func saveBtnTapped(_ sender: Any) {
let fileName = myTextField.text!
let body = myTextView.text!

// ファイル追加、配列を更新 monstersManager.addWord(fileName: fileName, body: body) let navi = self.presentingViewController as! UINavigationController // 落ちない print("presentingViewController は navi : \(navi)") print("navi.parent : \(String(describing: navi.parent))") // nil print("navi.presentingViewController : \(String(describing: navi.presentingViewController))") // nil // var homeVC = UIApplication.shared.keyWindow?.rootViewController as! HomeViewController // ダメ homeVC.isPrevVCAddMode = true dismiss(animated: true, completion: nil)

}

###試したこと

navi.parent
navi.presentingViewController
var homeVC = UIApplication.shared.keyWindow?.rootViewController as! HomeViewController

などで移動先の var homeVC を取得しようと試みるもうまくいかない。

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

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

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

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

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

fuzzball

2017/05/15 02:39

AddViewControllerの中でself.presentingViewControllerがUINavigationControllerになる状況が分かりませんので、もう少し詳しくViewControllerの構成を教えて下さい。HomeListViewControllerはInitial View Controllerではないのでしょうか?
ringotubame

2017/05/15 11:44

→ (navi) → HomeViewController → navi → AddViewController こうでした。(navi)が initial viewcontroller でした。sb みると navigationcontroller がありました。 addVC の保存ボタンを押すと、homeVC にもどり、homeVC の UI(table)を更新するかんじです。
ringotubame

2017/05/16 06:45 編集

navi.presentingViewController これが addvc の左となりの UINavigationController とおもっていたのが間違いだった。navi.presentingViewController で参照してたのはホームの左となりの UINavigationController でした。コンソールに出力してアドレスで確認しました
guest

回答1

0

自己解決

// AddViewController.swift
@IBAction func saveBtnTapped(_ sender: Any) {
let fileName = myTextField.text!
let body = myTextView.text!

// ファイルシステムへ追加、配列を更新 monstersManager.add(fileName: fileName, body: body) // navi1 → home → navi2 → addVC // self.presentingViewController は左端の navi1。 // self.presentingViewController を navi2 の方と勘違いしてたからうまくいかなかった let navi = self.presentingViewController as! UINavigationController let homeVC = navi.topViewController as! HomeViewController homeVC.isMonsterAdded = true dismiss(animated: true, completion: nil)

}

投稿2017/05/15 12:32

編集2017/05/15 14:42
ringotubame

総合スコア21

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問