Перезагрузка ViewController
У меня есть контроллер просмотра, отображающий некоторую информацию (а не таблицы).
У меня есть вызов обновления на удаленный сервер, который заполняет мою базу данных. Я хотел бы полностью перезагрузить мой ViewController после завершения вызова обновления.
Что мне делать?
Ответы
Ответ 1
Вам действительно не нужно:
[self.view setNeedsDisplay];
Честно говоря, я думаю, что это "пусть надеется на лучший" тип решения, в этом случае. Существует несколько подходов к обновлению вашего UIView
s:
- KVO
- Уведомления
- Делегирование
У каждого есть плюсы и минусы. В зависимости от того, что вы обновляете и какое "соединение" у вас между бизнес-слоем (подключение к серверу) и UIViewController
, я могу порекомендовать тот, который подходит вашим потребностям.
Ответ 2
если вы знаете, что ваша база данных hasbee обновлена, и вы хотите просто обновить viewcontrolle (это тоже мое дело). Я не нашел другого решения, но что я сделал
когда обновлена моя база данных, я назвал
[self viewDidLoad];
снова, и это сработало.
помните, если вы переопределите другой viewWillAppear или loadView, тогда вызовите их в том же порядке.
как.
[self viewDidLoad]; [self viewWillAppear: YES];
но я думаю, что в браузере должно быть более конкретное решение, например, кнопка обновления.
если у кого-то есть plz upload anse
Ответ 3
Если вы хотите перезагрузить ViewController, первоначально загруженный из XIB, вы можете использовать следующее расширение UIViewController:
extension UIViewController {
func reloadViewFromNib() {
let parent = view.superview
view.removeFromSuperview()
view = nil
parent?.addSubview(view) // This line causes the view to be reloaded
}
}
Ответ 4
Попробуйте это, вам нужно вызвать оба метода, чтобы перезагрузить просмотр,
как это работает для меня,
- Objective-C
[self viewDidLoad];
[self viewWillAppear:YES];
-Swift
self.viewDidLoad()
self.viewWillAppear(true)
Ответ 5
Обновить данные... изменить названия кнопок.. что бы вы ни обновляли.
тогда просто вызовите
[self.view setNeedsDisplay];
Ответ 6
Повторно инициализировать контроллер вида
YourViewController *vc = [[YourViewController alloc] initWithNibName:@"YourViewControllerIpad" bundle:nil];
[self.navigationController vc animated:NO];
Ответ 7
Вернитесь к вашему ViewController еще раз. в моей ситуации [self.view setNeedsDisplay];
и [self viewDidLoad]; [self viewWillAppear:YES];
не работает, но метод ниже работал.
В объекте C
UIStoryboard *MyStoryboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil ];
UIViewController *vc = [MyStoryboard instantiateViewControllerWithIdentifier:@"ViewControllerStoryBoardID"];
[self presentViewController:vc animated:YES completion:nil];
Swift:
let secondViewController = self.storyboard!.instantiateViewControllerWithIdentifier("ViewControllerStoryBoardID")
self.presentViewController(secondViewController, animated: true, completion: nil)
Ответ 8
Не рекомендуется вызывать ViewDidLoad или ViewWillAppear самостоятельно.
В ViewDidLoad включена функция loadData() для подготовки данных. Это выполняется в начальном прогоне.
Если вы хотите перезагрузить, снова вызовите loadData(), чтобы получить данные из модели. В вызове tableView reloadData() или в обычном представлении setNeedsDisplay().
Ответ 9
Вы должны использовать
-(void)viewWillAppear:(BOOL)animated
и задайте свои записи, как вы хотите...