47
36

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【Swift】前の画面への値の受け渡し方

Last updated at Posted at 2019-02-21

概要

アプリを作っているときに次の画面への値渡しは遷移先のViewControllerのインスタンスを取得したり、prepare(for segue: UIStoryboardSegue, sender: Any?)を用いることで行えます。

今回はその逆で、遷移した先の画面から 遷移元の画面へ値を渡す 方法についてです。

NavigationControllerなし

画面の遷移にNavigationControllerが関係していない状態での値の受け渡し方法です。多くの場合はこの方法を用いると思います。

.swift
 let preVC = self.presentingViewController as! PreviousViewController
 preVC.variable = self.variable  //ここで値渡し

UIViewControllerのプロパティであるpresentingViewControllerには遷移元のViewControllerのインスタンスが格納されているので、それを取得してやれば値を受け渡せます。

NavigationControllerあり

上記のようにpresentingViewControllerを取得するところまでは同じ流れですが、プロパティにNavigationControllerが格納されるので以降の処理が少し変わります。

Showではない遷移をしてきたとき

.swift
let preNC = self.presentingViewController as! UINavigationController
// let preNC = self.navigationController as! UINavigationController でも可能かと思います
let preVC = preNC.viewControllers[preNC.viewControllers.count - 1] as! PreviousViewController
preVC.variable = self.variable  //ここで値渡し

Showで遷移してきたとき

.swift
let preNC = self.presentingViewController as! UINavigationController
// let preNC = self.navigationController as! UINavigationController
let preVC = preNC.viewControllers[preNC.viewControllers.count - 2] as! PreviousViewController
preVC.variable = self.variable  //ここで値渡し

補足説明のようなもの

UINavigationControllerのプロパティであるviewControllersは、公式ドキュメントを参照すると

The root view controller is at index 0 in the array, the back view controller is at index n-2, and the top controller is at index n-1, where n is the number of items in the array.

のように記述されています。つまりviewControllersの0番目にはroot view controller、n-1番目には表示されているViewController、n-2番目には一つ前のViewControllerが格納されているようです。

47
36
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
47
36

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?