Индикатор активности не отображается - PullRequest
4 голосов
/ 22 декабря 2011

У меня две проблемы с индикатором активности: 1. Индикатор активности не отображается на UIViewController

У меня есть индикатор активности в файле .xib. При нажатии кнопки он должен начать анимацию. и когда ответ от сервера получен, перед переходом на следующую страницу он должен прекратить анимацию. Я делаю это следующим образом:

activityIndicator.hidden = NO;

[activityIndicator performSelector:@selector(startAnimating) withObject:nil afterDelay:0.1];

[self.view bringSubviewToFront:activityIndicator];

....rest of code here....

activityIndicator.hidden = YES;

[activityIndicator stopAnimating];
  1. Индикатор активности не отображается в UITableView

Для просмотра таблицы я делаю то же самое, но на didselectrowatindexpath ...

Для просмотра таблицы я также попытался добавить вид деятельности к аксессуару ячейки, но все еще не отображается

В обоих случаях индикатор активности не отображается.

Пожалуйста, помогите

Спасибо

Ответы [ 3 ]

11 голосов
/ 22 декабря 2011

Если весь этот код в одном методе или в ответ на одно событие, то ни одно из изменений в представлениях не будет видимым, пока вы не вернетесь в цикл обработки событий. Вы задаете для ActivityIndicator.hidden значение NO, а затем снова задаете для него значение YES, прежде чем пользовательский интерфейс сможет обновиться.

Вы также, очевидно, останавливаете анимацию перед тем, как ее запустить.

Что вам нужно сделать, это сделать индикатор активности видимым и запустить его анимацию. Затем запланируйте работу, которую нужно выполнить (запустите асинхронное сетевое соединение, или поместите некоторую работу в очередь, или все, что вам нужно для выполнения) и вернитесь из этого метода, чтобы пользовательский интерфейс мог обновиться, индикатор мог быть нарисован, и анимация действительно может начаться.

Затем, в какой-то момент , после работа завершена, вы можете скрыть индикатор и остановить анимацию. Но вы не можете сделать все это в главном потоке за один оборот цикла событий. Ни одно из ваших изменений не будет видимым, потому что здесь вообще не будет происходить рисование во время выполнения этого метода (при условии, что это в главном потоке)

Надеюсь, это имеет смысл?

2 голосов
/ 23 декабря 2011

Теперь я изменил код так:

activityIndicator.hidden = NO;

[activityIndicator startAnimating];

[self performSelector:@selector(saveClicked) withObject:nil afterDelay:0.1];    

[self.view bringSubviewToFront:activityIndicator];

и все заработало:)

1 голос
/ 22 декабря 2011

Может быть, в tableView вместо self.view будет self.navigationController.view ??

...