добавить "Сейчас загружается", прежде чем выбрать вкладку UITabBarController? - PullRequest
1 голос
/ 04 марта 2009

Одной из вкладок моего UITabBarController требуется некоторое время для работы, прежде чем он сможет отобразиться.

Как лучше всего отобразить «Загружается сейчас» до того, как viewcontroler завершит свою работу?

Я попытался настроить представление «сейчас загружается» в методе viewDontLoad на вкладке viewController, затем я выполняю работу в viewDidAppear, устанавливая флаг, чтобы он не выполнялся снова в следующий раз через viewDidAppear.

Однако я никогда не вижу представление «сейчас загружается» ... необходимо выполнить некоторую оптимизацию - viewDidAppear viewcontroller вызывается перед TabBarControllerDelegate didSelectViewController.

Существует ли механизм UITabBarController, который позволял бы отображать вид заполнителя до того, как отобразится контроллер вида?

Есть идеи?

Спасибо, Matt

Ответы [ 3 ]

2 голосов
/ 04 марта 2009

NSObject's executeSelector: withObject: afterDelay: метод может быть полезен здесь. Отобразите свое предупреждение «Пожалуйста, подождите» или просмотрите, или что-то еще, затем используйте executeSelector: withObject: afterDelay: для начала фактической работы. Ваша загрузка будет отложена до следующего выполнения цикла событий, когда пользовательский интерфейс будет перерисован.

2 голосов
/ 04 марта 2009

Я могу ошибаться, но, возможно, ваша проблема в том, что, выполняя трудоемкую работу в viewDidAppear, вы блокируете основной поток событий, чтобы представление не обновлялось до тех пор, пока работа не будет завершена. То есть вы устанавливаете «загрузку сейчас» в viewWillAppear, но вы ее никогда не видите, так как к моменту завершения viewDidAppear это делается с тяжелой работой.

1 голос
/ 04 марта 2009

Техника для использования здесь такова:

  1. создайте "представление о загрузке" в вашем контроллер viewWillAppear: или viewDidLoad: метод
  2. затем создайте новую тему, чтобы сделать фактическая загрузка (или любое другое время процесс, который вы используете)
  3. по завершении отправьте сообщение на контроллер (с помощью делегата шаблон, например), что "загрузка" выполнена
  4. наконец, удалите представление Загрузка и позволить пользователю продолжить

В результате этого интерфейс приложения остается работоспособным, даже если конкретный контроллер представления занят.

Для этого нет встроенных методов, вам придется все это кодировать самостоятельно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...