いくつかの情報(テーブルビューではない)を表示するViewコントローラーがあります。
データベースを満たすリモートサーバーへの更新呼び出しがあります。更新呼び出しが完了したら、ViewControllerを完全にリロードしたいと思います。
私は何をすべきか?
あなたは本当にする必要はありません:
[self.view setNeedsDisplay];
正直なところ、私はそれが「最良の方法を期待しよう」タイプの解決策だと思いますこの場合。 UIView
sを更新するには、いくつかの方法があります。
それぞれに長所と短所があります。 更新するものと、ビジネスレイヤー(サーバー接続)とUIViewController
の間にある「接続」の種類に応じて、ニーズに合ったものをお勧めできます。
データベースが更新されたことがわかっていて、ViewControllerを更新するだけの場合(これは私の場合でした)。私は別の解決策を見つけられませんでしたが、データベースが更新されたときに私がやったことは、私は電話しました:
[self viewDidLoad];
再び、それは働いた。他のviewWillAppearまたはloadViewをオーバーライドした場合は、同じ順序で呼び出してください。好む。
[self viewDidLoad]; [self viewWillAppear:YES];
ブラウザの更新ボタンなど、より具体的なソリューションがあるはずだと思います。
最初に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
}
}
これを試してください。ビューをリロードするには両方のメソッドを呼び出す必要があります。
-目的-C
[self viewDidLoad];
[self viewWillAppear:YES];
-迅速
self.viewDidLoad()
self.viewWillAppear(true)
データを更新します...ボタンのタイトルを変更します。更新する必要があるものは何でも..
それからただ電話する
[self.view setNeedsDisplay];
再度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)
ViewDidLoadまたはViewWillAppearを自分で呼び出すことはお勧めしません。
ViewDidLoadに、データを準備するためのloadData()関数を含めます。これは最初の実行で実行されます。
リロードする場合は、loadData()を再度呼び出して、モデルからデータを取得します。 tableViewでreloadData()を呼び出すか、通常のビューでsetNeedsDisplay()を呼び出します。
View Controllerを再初期化する
YourViewController *vc = [[YourViewController alloc] initWithNibName:@"YourViewControllerIpad" bundle:nil];
[self.navigationController vc animated:NO];