UINavigation Controllerを追加した時にroot View Controllerも一緒についてきてびっくりしたと思います。
これは削除できます。
自分が追加したいUIViewControllerのShow the connection inspectorにおいて、Presenting Segues内のRelationshipの+からCtrlを押しながら矢印をUINavigationControllerまで伸ばすと、変更できます。
UINavigationControllerを使う時は、私はデータ数が多くなければUserDefaultsを利用するのがいいのではないかと思います。
そのままで保存できないデータを使っているのであれば、多く見かけるtopViewControllerに値を退避させて必要なところで読み込むのがいいと思います。
下記サンプルは、UserDefaultsを使う例です。
(参考)UserDefaultsの使い方
ViewControllerがroot View Controllerで、そこからNextViewControllerに画面遷移します。
NextViewControllerでテキストボックスにデータを入力して保存ボタンを押します。
この保存ボタンのアクションがsave(_:)メソッドです。
そこで渡したいデータをUserDefaultsに保存します。
ViewControllerに戻ったら、viewWillAppear(_:)メソッドで、UserDefaultsから読み込みます。
ここで注意が必要なのは、一番最初に起動した時は初めて表示されたときにもviewWillAppear(_:)メソッドが呼ばれ、その時にはUserDefaultsにデータが無いということです。
その場合は、nilの時なのでその場合の為にnilにも対応しておきましょう。
ViewController.swift
class ViewController: UIViewController {
//データを表示するラベル
@IBOutlet weak var lblDestination: UILabel!
//アプリ固有のデータを保存できる記憶領域
let ud = UserDefaults.standard
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
}
//このビューが表示される時に呼び出されるメソッド
override func viewWillAppear(_ animated: Bool) {
self.lblDestination.text = self.ud.string(forKey: "myData") ?? ""
}
}
NextViewController.swift
class NextViewController: UIViewController {
//受け渡すデータを入力するテキストボックス
@IBOutlet weak var txtSource: UITextField!
//アプリ固有のデータを保存できる記憶領域
let ud = UserDefaults.standard
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
}
//保存ボタンを押した時に呼ばれるメソッド
@IBAction func save(_ sender: Any) {
accessUserDefaults(read: false)
}
//UserDefaultsにアクセスする時に呼び出すメソッド
func accessUserDefaults(read: Bool) {
if read {
self.txtSource.text = self.ud.string(forKey: "myData") ?? ""
} else {
self.ud.set(self.txtSource.text, forKey: "myData")
}
}
}
