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.
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];
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()
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];
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()
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
.
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
}
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];
}
Rapide
UIBarButtonItem
de storyboard
à yourViewController
week
de sa définition comme suit: @IBOutlet var btNavigaitonRight: UIBarButtonItem!
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)
}
Dans Swift, j'ai fait ce qui suit:
Activer: UIApplication.sharedApplication().networkActivityIndicatorVisible = true
Désactiver: UIApplication.sharedApplication().networkActivityIndicatorVisible = false
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.
essayer self.navigationItem.leftBarButtonItem.customView = votre vue
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.