Любые идеи по запуску «загрузки» UIView, когда выбран определенный элемент в UITabBarController? - PullRequest
1 голос
/ 21 марта 2011

У меня есть приложение с четырьмя вкладками.У меня есть четыре UINavigationControllers, каждый из которых связан с UITabBarController, устанавливая свойство TabBarItem каждого контроллера, а затем добавляя контроллеры в UITabBarController.Это все стандартные тарифы iOS.

Одна из этих вкладок загружает UITableView, который отображает некоторые данные из удаленного веб-сервиса.Поскольку вызовы веб-службы обычно занимают около 1,5 секунд для завершения и десериализации, я хотел бы отобразить UIView «загрузки» с текстом «Загрузка ...», когда выбрана соответствующая вкладка.Я попробовал это несколькими способами:

  • назначение делегата событию ViewControllerSelected на UITabBarController и проверка, чтобы убедиться, что выбранный контроллер - тот, который мне интересенЗатем я пытаюсь показать «загрузочный» UIView.Все это происходит в AppDelegate;

  • , переопределяя методы ViewWillAppear и ViewWillDidAppear на самом контроллере.Показать LoadingHUDView в методе ViewWillAppear и скрыть в методе ViewDidAppear.

В обоих случаях:

  1. UIView «loading» является локальной переменной (lhv) и уже настроен с нужным мне текстом.
  2. lhv.SharedApplication.KeyWindow.Add (lhv);
  3. lhv.StartAnimating ();(UIView содержит UIActivityIndicatorView)
  4. Выполнение вызовов службы и обновление UITableView
  5. lhv.StopAnimating ();
  6. lhv.RemoveFromSuperview ();

(И да, я знаю, что мне не нужно использовать lhv.SharedApplication.KeyWindow в AppDelegate, потому что у меня есть локальный член "окна", доступный для меня.)

Проблема в том, что«загружающий» UIView не рендерится, пока ПОСЛЕ UINavigationController не отобразит свое представление.Я хочу, чтобы LoadingHUDView появлялся НЕМЕДЛЕННО, как только коснулся UITabBarController.Я также пытался использовать InvokeOnMainThread (), но не повезло.

Есть идеи?

Ответы [ 2 ]

2 голосов
/ 22 марта 2011

>. <Разобрался.Просто нужно было ускорить загрузку UIView в новом потоке в начале ViewWillAppear или ViewDidAppear.Затем просто выполните очистку в конце соответствующего метода, удалив представление из суперпредставления.Надо было подумать об этом давным-давно!D'ой! </p>

0 голосов
/ 03 января 2012

объявить счетчик отдельно; и добавить MyView.addsubview (_spinner);

...