1

ChangeViewControllerユーザーが自分のプロファイルに関する情報を変更できるようにする、モーダルに表示されたView Controllerが呼び出されました。ユーザーが完了したら、[ACCEPT CHANGES] ボタンが押され、アンワインド セグエを使用して終了しChangeViewController、メイン画面に戻ります。

このアンワインド セグエを実行する前に、アプリ全体のデータを更新することはできますか? 現在、ホーム画面およびその他の画面の情報は、ユーザーの変更後も変更されていません。アプリの再起動後にのみ情報が更新されます。すべてのView Controllerが最新の状態になるように、プログラムで「再起動」する方法はありますか? viewDidLoadより具体的には、データが更新されるようにすべてのビュー コントローラーの関数を呼び出す方法はありますか?

Swift でのソリューションが推奨されます。ありがとうございました!

4

2 に答える 2

1

このような関数でユーザーが変更された後、私はよく updateUI を使用します。これは非常に単純で、UI が更新されるたびに関数を呼び出すだけです。

func updateUI() {
    // Redraw your labels, update your UIElements, do what you have to do
}

アプリを閉じずにモーダルに表示された ViewController からこの関数を呼び出す方法は、委任を使用することです。モーダル プレゼンテーションはスタックとヒープから古い ViewController をスローしないため、委任は次のように機能します。

モーダルコントローラーで:

protocol ChangeViewControllerDelegat: class {
    func updateUI(sender:UIButton)
}

class ChangeViewController: UIViewController {

weak var delegate: ChangeViewControllerDelegat?

func opChangingUserSettings() {
     // Change settings with your code

     // tell your ViewController to do it. 
     delegate?.updateUI()
}

あなたのmainVCで

class MainViewController: UIViewController, ExtensionViewControllerDelegate {
       func updateUI() {
        // Redraw your labels, update your UIElements, do what you have to do
       }
}

それが役立つことを願っています!

ところで、ひょっとしてその場で言語を変えようとしているのですか?もしそうなら、私はあなたにそれを行う方法を示すことができます. そうでない場合、そして私があなたの質問を理解していれば、これはうまくいくはずです。

于 2015-08-13T06:55:44.777 に答える
0

シナリオにローカル通知を使用できます。

同様に、ユーザーが変更を完了し、ボタンを押して変更を受け入れると、ローカル通知を投稿してデータをリロードできます。そして、すべてのviewControllerでその通知をリッスンし、そこにデータをリロードできます。たとえば、テーブルビューの場合は、tableviewでreloadDataメソッドを呼び出すだけでそれを実現できます。

于 2015-08-13T06:51:17.497 に答える