2017-11-29 7 views
0

私のiOSアプリでは、ナビゲーションコントローラを使用してユーザーがナビゲートします。 ユーザは異なるUITableViewControllerを使用してナビゲートします。データをルートに戻すViewController

のUIViewController - のUITableViewController - のUITableViewController

ユーザーが、私は、ルートビューコントローラに戻るには、次の呼び出しを使用しています「最後」のUITableViewControllerの項目を選択した後:

DispatchQueue.main.async { self.navigationController?.popToRootViewController(animated: true) } 

どのようにすることができますデータをルートコントローラに戻しますか?以前は通知を使用していましたが、この概念は本当に嫌です。よりエレガントな方法がありますか? ビュースタック上のすべての単一のUIViewControllerは

func prepare(for segue: UIStoryboardSegue, sender: Any?) 

方法を使用して初期化され、自分のコールバックを実装する必要がありますか?

これはどのようにエレガントに実装できますか?

+0

あなたがseguesを使用していますか?その場合、unwind segueを使用し、unwindメソッドからテーブルビューコントローラインスタンスにアクセスしてデータを戻すことができます。 – Paulw11

+0

可能であれば、データモデルを変更して、最初のビューコントローラに戻った後、新しいデータに基づいて外観を更新する必要があります。 – Losiowaty

答えて

1

seguesを使用している場合、unwind segueを作成してpopToRootViewControllerの代わりに使用することができます。 Hereあなたは巻き戻しセグを作る方法を見ることができます。

そうでない場合は、お使いの階層に基づいて、popToRootViewController前に、あなたはこのようなあなたのビューコントローラにアクセスすることができます:

if let rootVC = navigationController?.viewControllers.first as? YourViewControllerClass { 
    rootVC.someProperty = dataToPass 
} 
navigationController?.popToRootViewController(animated: true) 
関連する問題