Comment définir l'indicateur d'activité dans la barre de navigation?
-
21-09-2019 - |
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.
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
- Connet
UIBarButtonItem
destoryboard
àyourViewController
- retirer
week
de sa définition comme:@IBOutlet var btNavigaitonRight: UIBarButtonItem!
-
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.