Question

Je suis nouveau au développement de l'iPhone. Je veux mettre un indicateur d'activité dans la barre de navigation. Je vois mon indicateur d'activité en dessous de 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 mettre mon indicateur d'activité dans la barre de navigation? Sil te plait aide moi. Merci.

Était-ce utile?

La solution

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] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
UIBarButtonItem * barButton = [[UIBarButtonItem alloc] initWithCustomView:activityIndicator];
[self navigationItem].rightBarButtonItem = barButton;
[activityIndicator startAnimating];

Autres conseils

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

Vous créez une nouvelle vue de l'indicateur d'activité ici, ce qui est bien, mais vous ne parlez pas 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];

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

Sur storyboard: Créer BarButtonItem à la barre de navigation. Ajouter la vue à être fils de votre BarButtonItem et ActivityIndicator à être fils de votre View.

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
}

Merci! Mon indicateur fonctionne maintenant.

Je partage un exemple de code pour noobs autres, de mettre 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 indicateur d'activité avec un UIWebView donc 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];
  }

Dans Swift, je l'ai comme suit:

Activer: UIApplication.sharedApplication().networkActivityIndicatorVisible = true

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

Swift

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

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

J'avais une question similaire à la réponse ici: iphone - changer programatically bouton de la barre de navigation pour l'indicateur d'activité

Je voulais changer le bouton de rafraîchissement dans la barre de navigation à l'indicateur d'activité et de retour.

essayez ceci: self.navigationItem.leftBarButtonItem.customView = your_view

J'ai essayé de l'utiliser maintenant et le code mentionné par guerrier ne fonctionne pas exactement comme il est. Je devais changer l'initialisation de activityIndicator:

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

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top