У меня есть приложение с четырьмя вкладками.У меня есть четыре UINavigationControllers, каждый из которых связан с UITabBarController, устанавливая свойство TabBarItem каждого контроллера, а затем добавляя контроллеры в UITabBarController.Это все стандартные тарифы iOS.
Одна из этих вкладок загружает UITableView, который отображает некоторые данные из удаленного веб-сервиса.Поскольку вызовы веб-службы обычно занимают около 1,5 секунд для завершения и десериализации, я хотел бы отобразить UIView «загрузки» с текстом «Загрузка ...», когда выбрана соответствующая вкладка.Я попробовал это несколькими способами:
назначение делегата событию ViewControllerSelected на UITabBarController и проверка, чтобы убедиться, что выбранный контроллер - тот, который мне интересенЗатем я пытаюсь показать «загрузочный» UIView.Все это происходит в AppDelegate;
, переопределяя методы ViewWillAppear и ViewWillDidAppear на самом контроллере.Показать LoadingHUDView в методе ViewWillAppear и скрыть в методе ViewDidAppear.
В обоих случаях:
- UIView «loading» является локальной переменной (lhv) и уже настроен с нужным мне текстом.
- lhv.SharedApplication.KeyWindow.Add (lhv);
- lhv.StartAnimating ();(UIView содержит UIActivityIndicatorView)
- Выполнение вызовов службы и обновление UITableView
- lhv.StopAnimating ();
- lhv.RemoveFromSuperview ();
(И да, я знаю, что мне не нужно использовать lhv.SharedApplication.KeyWindow в AppDelegate, потому что у меня есть локальный член "окна", доступный для меня.)
Проблема в том, что«загружающий» UIView не рендерится, пока ПОСЛЕ UINavigationController не отобразит свое представление.Я хочу, чтобы LoadingHUDView появлялся НЕМЕДЛЕННО, как только коснулся UITabBarController.Я также пытался использовать InvokeOnMainThread (), но не повезло.
Есть идеи?