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.

Foi útil?

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

  1. Connet UIBarButtonItem a partir de storyboard para yourViewController
  2. remover week De sua definição como: @IBOutlet var btNavigaitonRight: UIBarButtonItem!
  3. 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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top