2010-02-18 27 views
36

Je suis nouveau pour iphone development.I veulent définir un indicateur d'activité dans la navigation bar.I voir mon indicateur d'activité ci-dessous le code bar.My de navigation est iciComment définir l'indicateur d'activité dans la barre de navigation?

-(IBAction) gomethod : (id) sender 
{ 
xxMapSubviewcontroller = [[XxMapSubviewcontroller alloc] init]; 
[self.navigationController pushViewController:xxMapSubviewcontroller animated:YES]; 

activityIndicator = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray]; 
activityIndicator.frame = CGRectMake(0.0, 0.0, 20.0, 20.0); 
[activityIndicator startAnimating]; 

[xxMapSubviewcontroller.view addSubview:activityIndicator]; 
} 

Comment puis-je mettre mon indicateur d'activité la barre de navigation? S'il vous plaît, aidez-moi. Merci.

Répondre

69

j'ajouter le morceau de code ci-dessous dans la vue où je voulais l'indicateur d'activité dans la barre de navigation.

activityIndicator = [[UIActivityIndicatorView alloc] initWithFrame:CGRectMake(0, 0, 20, 20)]; 
    UIBarButtonItem * barButton = [[UIBarButtonItem alloc] initWithCustomView:activityIndicator]; 
[self navigationItem].rightBarButtonItem = barButton; 
    [activityIndicator startAnimating]; 
+22

J'ai remarqué que sur iOS 7, vous devez utiliser 'activityIndicator = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle: UIActivityIndicatorViewStyleGray];' ou l'indicateur n'apparaîtra pas. – antf

12

Vous créez une nouvelle vue d'indicateur d'activité ici, ce qui est correct, mais vous ne faites pas référence à l'indicateur d'activité dans la barre d'état.

Pour afficher l'indicateur d'activité dans la barre d'état, il suffit d'appeler ceci:

[[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:YES]; 
+5

Je veux afficher l'indicateur d'activité dans la barre de navigation – Warrior

+0

je avais besoin de solution de guerrier parce que je je cache la barre d'état. Non, il n'y a rien de mal avec votre solution bien sûr! –

1

essayez. self.navigationItem.leftBarButtonItem.customView = votre vue

0

J'ai essayé de l'utiliser maintenant et le code mentionné par le guerrier ne fonctionnait pas exactement tel quel. Je devais changer l'initialisation de activityIndicator:

activityIndicator = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray]; 

Avec ce changement, il devrait fonctionner comme prévu.

2

Merci! Mon indicateur fonctionne maintenant. Je partage un exemple de code pour les autres noobs, pour mettre ceci en contexte.

- (void) viewDidLoad

// custom button images 
UIImage *customImage = [UIImage imageNamed:@"menu24"]; 
UIImage *customImage2 = [UIImage imageNamed:@"search24"]; 
UIImage *customImage3 = [UIImage imageNamed:@"back24"]; 

// These are linked in my story board to Navigation Item 
[self customiseBarBtnItem:[self menu_button] 
    customImage:customImage selector:@selector(menuPressed:)]; 
[self customiseBarBtnItem:[self search_button] 
    customImage:customImage2 selector:@selector(searchPressed:)]; 
[self customiseBarBtnItem:[self backButton] 
    customImage:customImage3 selector:@selector(backPressed:)]; 

//initialize the activity indicator - as @antf comment suggests for ios7 
UIActivityIndicatorView *actInd=[[UIActivityIndicatorView alloc]          
    initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray]; 

//store it as a property on the view controller 
self.activityIndicator = actInd; 

// this sets up activity indicator  
UIBarButtonItem *progress_indicator = [[UIBarButtonItem alloc] 
    initWithCustomView:[self activityIndicator]]; 

// link custom buttons AND activity indicator in desired order to navigation bar 
self.navigationItem.rightBarButtonItems = 
    [NSArray arrayWithObjects: 
     self.menu_button, 
     self.search_button, 
     progress_indicator, 
     nil]; 

// Pour être complet - voici comment je montre programme/cacher mon bouton retour

if (bShowBack == YES) 
    self.navItemBar.leftBarButtonItem = self.backButton; 
else 
    self.navItemBar.leftBarButtonItem = Nil; 

// J'utilise mon activité indicateur avec un UIWebView donc le déclencher comme suit

- (void)webViewDidStartLoad:(UIWebView *)webView 
    {  
    [[self activityIndicator] startAnimating]; 
    } 

    - (void)didFailLoadWithError:(UIWebView *)webView 
      didFailLoadWithError:(NSError *)error 
    {  
    [[self activityIndicator] stopAnimating]; 
    } 

    - (void)webViewDidFinishLoad:(UIWebView *) webView 
    { 
    [[self activityIndicator] stopAnimating]; 
    } 
3

Sur le storyboard: Créer dans la barre de navigation. Ajouter Vue pour être fils de votre BarButtonItem et ActivityIndicator pour être fils de votre View.

+0

pourriez-vous expliquer plus cela? merci d'avance – gadget00

+0

Oui, sur StoryBoard: faites glisser vers la barre de navigation BarButtonItem, faites maintenant glisser l'UIView pour être sous-vue de BarButtonItem, faites maintenant glisser l'ActivityIndicator pour être sous-vue de l'UIView. – evya

1

Swift, je ne les suivantes:

ENABLE:UIApplication.sharedApplication().networkActivityIndicatorVisible = true

Désactiver:UIApplication.sharedApplication().networkActivityIndicatorVisible = false

+0

Cela va dans la barre d'état si – powerj1984

+1

Vous ne vous trompez pas. J'ai mal lu les OP - excuses. Cela dit, je suis tombé sur ce post en cherchant une réponse à la question de savoir comment afficher l'indicateur d'activité réseau dans la barre d'état - j'espère que ma réponse apportera encore de l'aide à quelqu'un, sinon au PO. – djbp

12

Swift Code:

let activityIndicator = UIActivityIndicatorView(frame: CGRect(x: 0, y: 0, width: 20, height: 20)) 
let barButton = UIBarButtonItem(customView: activityIndicator) 
self.navigationItem.setRightBarButtonItem(barButton, animated: true) 
activityIndicator.startAnimating() 
10

Cela a fonctionné pour moi dans Swift :

let activityIndicator: UIActivityIndicatorView = UIActivityIndicatorView.init(activityIndicatorStyle: .White) 
let refreshBarButton: UIBarButtonItem = UIBarButtonItem(customView: activityIndicator) 
self.navigationItem.leftBarButtonItem = refreshBarButton 
activityIndicator.startAnimating() 
+0

Cela se bloque dans 10.1.1 avec: libC++ abi.dylib: se termine avec une exception non interceptée de type NSException –

0

Comme WhatsApp:

// Déclare

let activityIndicator = UIActivityIndicatorView(activityIndicatorStyle: .gray) 

// viewDidLoad

self.activityIndicator.hidesWhenStopped = true 

func showIndicator() { 
    self.navigationItem.titleView = self.activityIndicator 
    self.activityIndicator.isHidden = false 
} 

func hideIndicator() { 
    self.navigationItem.titleView = nil 
}