Como definir o indicador de atividade na barra de navegação?
-
21-09-2019 - |
Pergunta
Eu sou novo no desenvolvimento do iPhone. Quero definir um indicador de atividade na barra de navegação. Vejo meu indicador de atividade abaixo da barra de navegação. Meu código está aqui
- (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];
}
Como posso definir meu indicador de atividade na barra de navegação? Por favor, me ajude. Obrigado.
Solução
Adicionei a parte abaixo do código na visualização em que queria o indicador de atividade na barra de navegação.
activityIndicator = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
UIBarButtonItem * barButton = [[UIBarButtonItem alloc] initWithCustomView:activityIndicator];
[self navigationItem].rightBarButtonItem = barButton;
[activityIndicator startAnimating];
Outras dicas
Código Swift:
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()
Você está criando uma nova visualização de indicador de atividade aqui, o que é bom, mas não está se referindo ao indicador de atividade na barra de status.
Para mostrar o indicador de atividade na barra de status, basta chamar isso:
[[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:YES];
Isso funcionou para mim em Swift:
let activityIndicator: UIActivityIndicatorView = UIActivityIndicatorView.init(activityIndicatorStyle: .White)
let refreshBarButton: UIBarButtonItem = UIBarButtonItem(customView: activityIndicator)
self.navigationItem.leftBarButtonItem = refreshBarButton
activityIndicator.startAnimating()
No storyboard: Crio BarButtonItem
na barra de navegação. Adicione a vista para ser filho do seu BarButtonItem
e ActivityIndicator
ser filho do seu View
.
Como whatsapp:
//Declarar
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
}
Obrigado! Meu indicador está funcionando agora.
Estou compartilhando um exemplo de código para colegas noobs, para colocar isso em contexto.
- (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];
// para completude - é assim que eu mostro/ocultar meu botão traseiro
if ( bShowBack == YES )
self.navItemBar.leftBarButtonItem = self.backButton;
else
self.navItemBar.leftBarButtonItem = Nil;
// eu uso meu indicador de atividade com um uiwebview, então o desencadeie o seguinte
- (void)webViewDidStartLoad:(UIWebView *)webView
{
[[self activityIndicator] startAnimating];
}
- (void)didFailLoadWithError:(UIWebView *)webView
didFailLoadWithError:(NSError *)error
{
[[self activityIndicator] stopAnimating];
}
- (void)webViewDidFinishLoad:(UIWebView *) webView
{
[[self activityIndicator] stopAnimating];
}
Em Swift, fiz o seguinte:
Permitir: UIApplication.sharedApplication().networkActivityIndicatorVisible = true
Desativar: UIApplication.sharedApplication().networkActivityIndicatorVisible = false
Rápido
- Connet
UIBarButtonItem
a partir destoryboard
parayourViewController
- remover
week
De sua definição como:@IBOutlet var btNavigaitonRight: UIBarButtonItem!
Use estes métodos para indicar e interromper o indicador de atividade:
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) }
Eu tive uma pergunta semelhante com resposta aqui:iPhone - Altere programaticamente o botão da barra de navegação para o indicador de atividade
Eu queria alterar o botão Atualizar na barra NAV para o indicador de atividade e voltar novamente.
Experimente isso: self.navigationItem.leftBarButtonItem.customView = your_view
Tentei usá -lo agora e o código mencionado pelo Warrior não funcionou exatamente como está. Eu tive que alterar a inicialização do AtivityIndicator:
activityIndicator = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
Com essa mudança, deve funcionar conforme o esperado.