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

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

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

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

Q&A

解決済

1回答

1701閲覧

UIBarButtonItem action で画面遷移し遷移元に値を返す時 反応なし

ludolf

総合スコア39

Swift

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

0グッド

0クリップ

投稿2019/08/14 07:52

いつもお世話になっております。

早速ですが、UIBarButtonItemでpresent用いて画面遷移しているのですが、
画面遷移から戻ってきた時にprepareに入りません、、
printで入ったと記述していますが、それすら入ってません、、

流れとしては、
ハンバーガーメニューをタップ

メニューが出てきて適当な候補をタップ後dismissする

prepareで何を選択したか取得

何が原因でしょうか?

ViewController

1override func loadView(){ 2 super.loadView() 3 4 ・・・色々・・・ 5 6 7 let button = UIBarButtonItem(image: UIImage(named: "bars"), style: .plain, target: 8 self, action: #selector(hambergerButtonTapped(sender:))) 9 10 self.navigationItem.rightBarButtonItem = button 11 12} 13 14 15@objc internal func hambergerButtonTapped(sender: UIBarButtonItem) { 16 17 let sb:UIStoryboard = UIStoryboard(name: "Main", bundle: nil) 18 19 let nextView = sb.instantiateViewController(withIdentifier: "MenuView") as! MenuViewController 20 21 self.present(nextView, animated: false,completion: nil) 22 23} 24 25//prepare 26override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 27 print("入った") 28 guard let identifier = segue.identifier else { 29 // identifierが取れなかったら処理やめる 30 return 31 } 32 let controller = segue.destination as! MenuViewController 33 34 // 遷移先で処理を終えた後の処理をここで書く 35 controller.resultHandler = { val in 36 print(val) // テスト 37 } 38} 39

MenuViewController

1var resultHandler: ((String) -> Void)? 2 3 ・・・色々・・・ 4 5//タップされた時呼ばれる 6func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 7 8 let val:String = TODO[indexPath.row][1] //hogehoge 9 10 let preNC = self.presentingViewController as! UINavigationController 11 12 let preVC = (preNC.viewControllers[preNC.viewControllers.count - 1] as! ViewController).self 13 14 if let handler = self.resultHandler { 15 handler(val) 16 } 17 18 dismiss(animated: false, completion: nil) 19}

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

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

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

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

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

guest

回答1

0

自己解決

stroyboardを使わないでコードだけでnavigationControllerを使っていたのですが、storyboardを使ってprepareしたら一発でできました、、(なぜだ?)
疑問が残りますが、思う動きができたので解決ということにします。

投稿2019/08/15 02:09

ludolf

総合スコア39

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問