Добавить UIActivityIndicatorView в UIBarButton - PullRequest
29 голосов
/ 12 ноября 2009

Как добавить круг прокрутки UIActivityIndicatorView в UIBarButton, чтобы, когда пользователь нажимает на одну из этих кнопок на панели навигации, он видел спиннер во время загрузки?

Ответы [ 6 ]

43 голосов
/ 01 февраля 2011

Если вы пытаетесь отобразить колесо активности на кнопке панели навигации (например, у вас может быть кнопка обновления на панели навигации) - вы можете создать новый UIBarButtonItem с пользовательским представлением, равным UIActivityIndicatorView:

Objective-C

uiBusy = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhite];
uiBusy.hidesWhenStopped = YES;
[uiBusy startAnimating];
[self.navigationItem.rightBarButtonItem initWithCustomView:uiBusy];

Swift

let uiBusy = UIActivityIndicatorView(activityIndicatorStyle: .White)
uiBusy.hidesWhenStopped = true
uiBusy.startAnimating()
self.navigationItem.rightBarButtonItem = UIBarButtonItem(customView: uiBusy)

Это перезаписывает ваш rightBarButtonItem с помощью вращающегося колеса.Когда вы закончите, просто воссоздайте rightBarButtonItem.

6 голосов
/ 21 февраля 2013
activityIndicator = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhite];
activityIndicator.hidesWhenStopped = YES;
self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:activityIndicator];

Поместите следующее где это необходимо:

[activityIndicator startAnimating];
[activityIndicator stopAnimating];
3 голосов
/ 12 ноября 2009

На самом деле индикатор активности не добавляется как элемент панели инструментов. Это подпредставление текущего представления.


    UIActivityIndicatorView *act = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhite];
    [act setCenter:CGPointMake(20, 20)];
    [act startAnimating];
    [self.view addSubview:act];

Не забудьте выпустить его в -(void)dealloc.

0 голосов
/ 26 апреля 2014

Используйте эти методы

-(void)startAniatingActivityIndicator{
@try {
    activityIndicator = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhite];
    activityIndicator.frame = CGRectMake(self.window.frame.size.width-30, 32.5, activityIndicator.bounds.size.width, activityIndicator.bounds.size.height);
    [self.window addSubview:activityIndicator];
    [activityIndicator startAnimating];
    [self.window bringSubviewToFront:activityIndicator];
}
@catch (NSException *exception) {

}
@finally {

}

}

-(void)stopAniatingActivityIndicator{
[activityIndicator stopAnimating];
[activityIndicator removeFromSuperview];
activityIndicator = nil;

}

0 голосов
/ 12 ноября 2009

псевдокод, я не собираюсь проверять это в Xcode, но что-то вроде этого должно работать:

UIActivityIndicatorView *act = [[UIActivityIndicatorView alloc] init];
act.frame = CGMakeRect(3,3,25,25);
[myBarButton addSubview:act];
[act release];
0 голосов
/ 12 ноября 2009

UIActivityIndicatorView - это тип представления. Установите его рамку так, чтобы он находился внутри вашей кнопки, и используйте -addSubview, чтобы добавить его в иерархию представлений UIBarButton.

Я упрощаю, так как вы должны попытаться подогнать его под пространство (возможно, путем масштабирования) и отцентрировать его ...

...