web-dev-qa-db-fra.com

Comment définir l'indicateur d'activité dans la barre de navigation?

Je suis nouveau dans le développement d'iPhone.Je veux définir un indicateur d'activité dans la barre de navigation.Je vois mon indicateur d'activité sous la barre de navigation.Mon code est ici

  -(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 définir mon indicateur d'activité dans la barre de navigation? S'il vous plaît aidez-moi. Merci.

39
Warrior

J'ajoute le 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];
74
Warrior

Code rapide:

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()
18
Mkey

Vous créez ici une nouvelle vue d'indicateur d'activité, 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, appelez simplement ceci:

[[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:YES];
12
Zoran Simic

Cela a fonctionné pour moi à Swift:

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

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

3
evya

Comme WhatsApp:

//Déclarer

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
}
2
Urvish Modi

Merci! Mon indicateur fonctionne maintenant.

Je partage un exemple de code pour mes collègues noobs, pour mettre cela 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 - c’est ainsi que j’affiche/cache mon bouton Précédent par programmation  

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

// J'utilise mon indicateur d'activité avec un UIWebView afin de 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];
  }
2
Anthony De Souza

Rapide

  1. Connet UIBarButtonItem de storyboard à yourViewController
  2. supprimer week de sa définition comme suit: @IBOutlet var btNavigaitonRight: UIBarButtonItem!
  3. Utilisez ces méthodes pour l'indicateur d'activité de démarrage et d'arrêt:

    var activityIndicator = UIActivityIndicatorView()
    
    func startBarButtonIndicator() {
        activityIndicator = UIActivityIndicatorView(frame: CGRect(x: 0, y: 0, width: 20, height: 20))
        activityIndicator?.color = .gray
        let barButton = UIBarButtonItem(customView: activityIndicator!)
        self.navigationItem.setRightBarButton(barButton, animated: true)
        activityIndicator?.startAnimating()
    }
    
    func stopBarButtonIndicator() {
        activityIndicator?.stopAnimating()
        navigationItem.setRightBarButton(btNavigaitonRight, animated: true)
    }
    
2
Hamed Akhlaghi

Dans Swift, j'ai fait ce qui suit:

Activer: UIApplication.sharedApplication().networkActivityIndicatorVisible = true

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

2
djbp

J'avais une question similaire avec réponse ici: iphone - changer le bouton de la barre de navigation par programme en indicateur d'activité

Je voulais changer le bouton d'actualisation de la barre de navigation pour l'indicateur d'activité et inversement.

1
cagreen

essayer self.navigationItem.leftBarButtonItem.customView = votre vue 

1
iXcoder

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

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

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

0
Nir