Подтвердить что ты не робот

Перезагрузка ViewController

У меня есть контроллер просмотра, отображающий некоторую информацию (а не таблицы).

У меня есть вызов обновления на удаленный сервер, который заполняет мою базу данных. Я хотел бы полностью перезагрузить мой ViewController после завершения вызова обновления.

Что мне делать?

4b9b3361

Ответ 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

и задайте свои записи, как вы хотите...