Pregunta

Soy nuevo en el desarrollo del iPhone. Quiero establecer un indicador de actividad en la barra de navegación. Veo mi indicador de actividad por debajo de la barra de navegación. Mi código es aquí

- (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];
}

¿Cómo puedo configurar mi indicador de actividad en la barra de navegación? Por favor, ayúdame. Gracias.

¿Fue útil?

Solución

añado a continuación la pieza de código en la vista donde yo quería que el indicador de actividad en la barra de navegación.

activityIndicator = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
UIBarButtonItem * barButton = [[UIBarButtonItem alloc] initWithCustomView:activityIndicator];
[self navigationItem].rightBarButtonItem = barButton;
[activityIndicator startAnimating];

Otros consejos

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

Usted está creando una nueva visión del indicador de actividad aquí, lo cual está bien, pero no se está refiriendo al indicador de actividad en la barra de estado.

Para mostrar el indicador de actividad en la barra de estado, sólo tiene que llamar a esto:

[[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:YES];

Esto funcionó para mí en Swift:

let activityIndicator: UIActivityIndicatorView = UIActivityIndicatorView.init(activityIndicatorStyle: .White)
let refreshBarButton: UIBarButtonItem = UIBarButtonItem(customView: activityIndicator)
self.navigationItem.leftBarButtonItem = refreshBarButton
activityIndicator.startAnimating()

El guión gráfico: Crea BarButtonItem en la barra de navegación. Añadir vista a ser hijo de su BarButtonItem y ActivityIndicator a ser hijo de su View.

Al igual que 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
}

Gracias! Mi indicador está trabajando ahora.

Estoy compartiendo un ejemplo de código para los compañeros noobs, para poner esto en 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 completar - esta es la forma en que mediante programación mostrar / ocultar mi botón de retroceso

if ( bShowBack == YES ) 
     self.navItemBar.leftBarButtonItem = self.backButton;
else 
     self.navItemBar.leftBarButtonItem = Nil;

// uso mi indicador de actividad con un UIWebView así desencadenar la siguiente manera:

  - (void)webViewDidStartLoad:(UIWebView *)webView
  {    
    [[self activityIndicator] startAnimating];
  }

  - (void)didFailLoadWithError:(UIWebView *)webView 
          didFailLoadWithError:(NSError *)error
  {    
     [[self activityIndicator] stopAnimating];
  }

  - (void)webViewDidFinishLoad:(UIWebView *) webView
  {
     [[self activityIndicator] stopAnimating];
  }

En Swift, hice lo siguiente:

Activar: UIApplication.sharedApplication().networkActivityIndicatorVisible = true

Desactivar: UIApplication.sharedApplication().networkActivityIndicatorVisible = false

Swift

  1. Connet UIBarButtonItem de storyboard a yourViewController
  2. eliminar week de su definición como: @IBOutlet var btNavigaitonRight: UIBarButtonItem!
  3. Utilice estos métodos para el arranque y parada indicador de actividad:

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

Yo tenía una pregunta similar con la respuesta aquí: - programáticamente cambiar botón de la barra de navegación a la actividad del indicador

Yo quería cambiar el botón de actualización en la barra de navegación que el indicador de actividad y de vuelta otra vez.

intente esto: self.navigationItem.leftBarButtonItem.customView = your_view

He intentado utilizar ahora y el código mencionado por guerrero no funcionó exactamente como es. Tuve que cambiar la inicialización de activityIndicator:

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

Con este cambio debería funcionar como se esperaba.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top