2009-11-12 2 views

Répondre

32

Si vous essayez de montrer la roue d'activité dans un bouton de la barre de navigation (par exemple, vous pourriez avoir un bouton d'actualisation de votre barre de navigation) - vous pouvez créer une nouvelle UIBarButtonItem avec une vue personnalisée étant le 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) 

Ceci écrase votre rightBarButtonItem avec la roue qui tourne. Lorsque vous avez terminé, recréez simplement le rightBarButtonItem.

+5

'[self.navigationItem.rightBarButtonItem initWithCustomView: uiBusy]; 'me semble douteux. Je m'attendrais 'self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView: uiBusy];' selon la réponse de @ emotality. –

+1

Pour l'enregistrement: Vous voulez généralement définir 'uiBusy.activityIndicatorViewStyle = .gray' – Jeremy

+0

J'utilise une propriété calculée pour accéder à uiBusy:' private var uiBusy: UIActivityIndicatorView { si laissez busyView = self.navigationItem.rightBarButtonItem? .customView comme?UIActivityIndicatorView { retour busyView } else { laisser uiBusy = UIActivityIndicatorView (activityIndicatorStyle: .white) uiBusy.hidesWhenStopped = true uiBusy.activityIndicatorViewStyle = .gray self.navigationItem.rightBarButtonItem = UIBarButtonItem (CustomView: uiBusy) retour uiBusy } } ' – Jeremy

-1

UIActivityIndicatorView est un type de vue. Définissez son cadre pour être dans votre bouton et utilisez -addSubview pour l'ajouter à la hiérarchie d'affichage du UIBarButton.

Je simplifie, puisque vous devez essayer de l'adapter à l'espace (éventuellement par mise à l'échelle) et centrez ...

-1

pseudocode, je ne vais pas vérifier dans Xcode, mais quelque chose comme ceci devrait fonctionner:

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

'UIBarButtonItem' n'est pas une sous-classe' UIView' et n'a pas 'addSubview:'. Vous devriez faire quelque chose comme 'UIBarButtonItem * myBarButton = [[UIBarButtonItem alloc] initWithCustomView: act];' à la place ou 'myBarButton.customView = act;'. –

3

En fait, l'indicateur d'activité n'est pas ajouté comme élément de la barre d'outils. C'est une sous-vue de la vue actuelle.


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

Souvenez-vous de le libérer dans -(void)dealloc.

+0

Plus d'informations sur la façon d'utiliser l'indicateur d'activité est ici: 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]; 

Placez le suivant où jamais est nécessaire:

[activityIndicator startAnimating]; 
[activityIndicator stopAnimating]; 
0

Utilisez ces méthodes

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

}

Questions connexes