2009-11-12 9 views

Odpowiedz

32

Jeśli próbujesz pokazać koło działalność na przycisk paska nawigacji (np możesz mieć przycisk odświeżania na swoim pasku nawigacyjnym) - można utworzyć nowy UIBarButtonItem z widokiem zwyczaj będąc UIActivityIndicatorView:

Cel 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) 

Powoduje to nadpisanie numeru rightBarButtonItem za pomocą obracającego się koła. Kiedy skończysz, po prostu odtwórz numer rightBarButtonItem.

+5

'[self.navigationItem.rightBarButtonItem initWithCustomView: uiBusy]; 'wydaje mi się podejrzany. Spodziewałbym się 'self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView: uiBusy];' jak za odpowiedź @ emotality. –

+1

Dla zapisu: Zwykle chcesz ustawić 'uiBusy.activityIndicatorViewStyle = .gray' – Jeremy

+0

Używam obliczonej właściwości, aby uzyskać dostęp do interfejsu uiBusy:' private var uiBusy: UIActivityIndicatorView { , jeśli pozwala busyView = self.navigationItem.rightBarButtonItem? .customView jako?UIActivityIndicatorView { powrotu busyView } else { pozwolić uiBusy = UIActivityIndicatorView (activityIndicatorStyle: .white) uiBusy.hidesWhenStopped = prawda uiBusy.activityIndicatorViewStyle = .gray self.navigationItem.rightBarButtonItem = UIBarButtonItem (CustomView: uiBusy) powrotu uiBusy } } ' – Jeremy

-1

UIActivityIndicatorView to rodzaj widoku. Ustaw jego ramkę w swoim przycisku i użyj -addSubview, aby dodać ją do hierarchii widoku przycisku UIBarButton.

mam upraszczając, ponieważ trzeba starać się dopasować go do miejsca (ewentualnie poprzez skalowanie) i wyśrodkować go ...

-1

pseudokod, ja nie zamierzam sprawdzić w Xcode, ale coś tak powinno działać:

UIActivityIndicatorView *act = [[UIActivityIndicatorView alloc] init]; 
act.frame = CGMakeRect(3,3,25,25); 
[myBarButton addSubview:act]; 
[act release]; 
+0

'UIBarButtonItem' nie jest podklasą' UIView' i nie ma 'addSubview:'. Powinieneś zrobić coś takiego jak 'UIBarButtonItem * myBarButton = [[UIBarButtonItem alloc] initWithCustomView: act];' zamiast lub 'myBarButton.customView = act;'. –

3

Rzeczywiście wskaźnik aktywności nie jest dodawany jako element paska narzędzi. To jest podgląd bieżącego widoku.


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

Pamiętaj, aby wydać go w -(void)dealloc.

+0

Więcej informacji o używaniu wskaźnika aktywności znajduje się tutaj: http://stackoverflow.com/questions/593234/how-to-use-activity-indicator-view-on-iphone –

5
activityIndicator = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhite]; 
activityIndicator.hidesWhenStopped = YES; 
self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:activityIndicator]; 

miejsce następujące, gdzie zawsze jest potrzebna:

[activityIndicator startAnimating]; 
[activityIndicator stopAnimating]; 
0

użyć tej metody

-(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; 

}