

１つ前に戻る場合は、`self.dismissViewControllerAnimated(true, completion: nil)`
で、その閉じた画面は deinit されるのですが、又は２つ前に戻る場合も、deinit されるのですが、
`self.presentingViewController?.presentingViewController?.dismissViewControllerAnimated(true,
completion: nil)` 画面遷移が処理によってまちまちの場合など、対象の view
から移動した時に必要に応じて、画面を移動し、指定した画面のインスタンスを破棄することはできないものでしょうか？

初歩的な質問で申し訳ございませんが、 Swift のプログラム開発（スマホアプリ）をはじめて２週間ほどの素人です

どなたか教えていただければと思います。

状況は下記のような画面遷移の場合で、画面４（失敗画面）から画面２へ戻る時に  
画面２のインスタンスを破棄し新たに、初期処理を実行したいと思っております。  
—————————————————————————————————————  
画面１（スタート画面）→画面２（メイン画面）┠→画面３（成功画面）  
┠→画面４（失敗画面）  
—————————————————————————————————————

画面４にはボタンが”はい” と ”いいえ”があり  
”はい”が選択された場合は、画面２へ  
”いいえ”が選択された場合は、画面１へそれぞれ移行したいのですが

//”はい”を選択時下記コードを実行すると  
`self.dismissViewControllerAnimated(true, completion: nil)`  
//画面４のインスタンスを破棄して画面２に戻ると当然前回の内容のまま  
//viewDidLoad を実行せずに画面２に戻ってしまうのですが、  
//画面２から失敗画面に遷移するタイミングで、画面２のインスタンスを解放できないものでしょうか？  
//また画面２へ移行するタイミングで画面の内容を初期化したいのですが

//“いいえ”を選択時下記コードを実行  
//画面４のインスタンスを破棄後画面１へ戻る（画面４、画面２とも deinit されているようです）  
`self.presentingViewController?.presentingViewController?.dismissViewControllerAnimated(true,
completion: nil)`


CC BY-SA 4.0
2016-01-26T07:44:04.887
21325
2019-06-05T17:29:30.083
2019-06-05T17:29:30.083
32986
14139
question
swift
UIViewControllerの画面遷移について画面を遷移するたびにメモリを消費してしまいます。


画面を初期化したいので、View Controllerをメモリから解放して、おなじView
Controllerを生成するというのは、やや乱暴な話です。モーダルから戻る直前に、View
Controller上の諸項目を、スタート状態に戻しておくという処理で、なんの問題も起きないでしょう。

たとえば……  
モーダルを呼ぶ側のView
Controllerのクラスを、`ViewController`とします。`ViewController`には、3つの`UITextField`があって、モーダルView
Controllerで、OKボタンを押したら、3つの`UITextField`に入力されたテキストを消してから「dismiss」するとします。

[code]

    class ViewController: UIViewController {
    
        @IBOutlet weak var textField1: UITextField!
        @IBOutlet weak var textField2: UITextField!
        @IBOutlet weak var textField3: UITextField!
    
        override func viewDidLoad() {
            super.viewDidLoad()
    
            clearValues()
        }
    
        // 諸項目を開始状態に戻す。
        func clearValues() {
            textField1.text = ""
            textField2.text = ""
            textField3.text = ""
        }
    
        ・・・・・・・
    
    }
    
[/code]

そして、モーダルView ControllerのOKボタンのアクションメソッド`dismissWithOK()`を、こう実装します。

[code]

    @IBAction func dismissWithOK(sender: AnyObject) {
        if let controller = self.presentingViewController as? ViewController {
            controller.clearValues()
            controller.dismissViewControllerAnimated(true, completion: nil)
        }
    }
    
[/code]


CC BY-SA 3.0
2016-01-26T10:46:45.187
21337
2016-01-26T10:46:45.187
7362
21325
answer