Как использовать UIActivityIndicatorView на пользовательском UIButton? - PullRequest
0 голосов
/ 16 ноября 2011

Я хочу использовать UIActivityIndicatorView на своей пользовательской кнопке UIB.

Вот мой код:

if (sender.tag == 1) 
{
    // Start animating
    activityIndicator.hidden = NO;
    [activityIndicator startAnimating];

    // Check if the network is available
    if ([self reachable]) {
        // Stop animating
        activityIndicator.hidden = YES;
        [activityIndicator stopAnimating];
     }
  }

Что я хочу сделать здесь: как только пользователь нажмет кнопку, я хочу запустить ActivityIndicatior, пока Reachable, проверять доступность сети.Как только это будет сделано, перейдите к следующему представлению.

Обновление UIActivityIndicator находится поверх моего пользовательского UIButton.Сборка прошла успешно, но ActivityIndicator не отображается, когда я касаюсь кнопки.

Ответы [ 2 ]

1 голос
/ 13 ноября 2015

Я уверен, что у тебя был ответ с тех пор.Через 4 года язык изменился на Swift, но у меня возникла та же проблема: UIActivityIndicatorView не отображается при добавлении через:

    self.myButton.addSubview(self.myIndicatorView)

Мне пришлось подняться на уровень вверх:

    self.myButton.superview!.addSubview(self.myIndicatorView)
0 голосов
/ 16 ноября 2011

Предполагая, что все остальное правильно в вашем проекте, проблема в том, что вы показываете и скрываете индикатор активности в одном и том же цикле событий, не давая паузы для его отрисовки.Позвольте мне объяснить:

Если у вас есть код:

UIView* view = someView; 
view.backgroundColor = [UIColor redColor];

// various synchronous operations

view.backgroundColor = [UIColor yellowColor];

Представление будет иметь только желтый цвет фона.

Чтобы ответить на ваш вопрос, вы, вероятно, хотите анимировать счетчик, выполнить асинхронную операцию, а затем остановить анимацию.Ключ заключается в том, чтобы не останавливаться в главном цикле событий во время выполнения асинхронной задачи.Если вам удобно с блоками, это будет выглядеть примерно так:

if (sender.tag == 1) {

    // Start animating
    activityIndicator.hidden = NO;
    [activityIndicator startAnimating];

    // Check if the network is available
    [self checkReachableWithCallback:^{
        // Stop animating
        activityIndicator.hidden = YES;
        [activityIndicator stopAnimating];
    }];

}
...