web-dev-qa-db-ja.com

ViewControllerのリロード

いくつかの情報(テーブルビューではない)を表示するViewコントローラーがあります。

データベースを満たすリモートサーバーへの更新呼び出しがあります。更新呼び出しが完了したら、ViewControllerを完全にリロードしたいと思います。

私は何をすべきか?

38
Tiago Veloso

あなたは本当にする必要はありません:

[self.view setNeedsDisplay];

正直なところ、私はそれが「最良の方法を期待しよう」タイプの解決策だと思いますこの場合UIViewsを更新するには、いくつかの方法があります。

  1. KVO
  2. 通知
  3. 代表団

それぞれに長所と短所があります。 更新するものと、ビジネスレイヤー(サーバー接続)とUIViewControllerの間にある「接続」の種類に応じて、ニーズに合ったものをお勧めできます。

14
Rui Peres

データベースが更新されたことがわかっていて、ViewControllerを更新するだけの場合(これは私の場合でした)。私は別の解決策を見つけられませんでしたが、データベースが更新されたときに私がやったことは、私は電話しました:

[self viewDidLoad];

再び、それは働いた。他のviewWillAppearまたはloadViewをオーバーライドした場合は、同じ順序で呼び出してください。好む。

[self viewDidLoad]; [self viewWillAppear:YES];

ブラウザの更新ボタンなど、より具体的なソリューションがあるはずだと思います。

23
Moaz Saeed

最初にXIBからロードされたViewControllerをリロードする場合、次のUIViewController拡張機能を使用できます。

extension UIViewController {
    func reloadViewFromNib() {
        let parent = view.superview
        view.removeFromSuperview()
        view = nil
        parent?.addSubview(view) // This line causes the view to be reloaded 
    }
}
11
juancazalla

これを試してください。ビューをリロードするには両方のメソッドを呼び出す必要があります。

-目的-C

[self viewDidLoad]; 
[self viewWillAppear:YES];

-迅速

self.viewDidLoad()
self.viewWillAppear(true)
6
Patel Jigar

データを更新します...ボタンのタイトルを変更します。更新する必要があるものは何でも..

それからただ電話する

[self.view setNeedsDisplay];
2
Shubhank

再度ViewControllerにアクセスします。私の状況では[self.view setNeedsDisplay];および[self viewDidLoad]; [self viewWillAppear:YES];は機能しませんが、以下の方法は機能しました。

Objective Cで

UIStoryboard *MyStoryboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil ];
UIViewController *vc = [MyStoryboard instantiateViewControllerWithIdentifier:@"ViewControllerStoryBoardID"];
[self presentViewController:vc animated:YES completion:nil];

迅速:

let secondViewController = self.storyboard!.instantiateViewControllerWithIdentifier("ViewControllerStoryBoardID")   
self.presentViewController(secondViewController, animated: true, completion: nil)
1
user4410354

ViewDidLoadまたはViewWillAppearを自分で呼び出すことはお勧めしません。

ViewDidLoadに、データを準備するためのloadData()関数を含めます。これは最初の実行で実行されます。

リロードする場合は、loadData()を再度呼び出して、モデルからデータを取得します。 tableViewでreloadData()を呼び出すか、通常のビューでsetNeedsDisplay()を呼び出します。

1
Vincent

View Controllerを再初期化する

YourViewController *vc = [[YourViewController alloc] initWithNibName:@"YourViewControllerIpad" bundle:nil];
[self.navigationController vc animated:NO];
0