progressview bar ios uiwebview ios7 uiactivityindicatorview

ios - bar - progress view swift 4



AƱadir un indicador de actividad en una uiwebview (4)

Tengo un viewDidLoad que crea una vista web e inicia un indicador de actividad. ¿Cómo puedo hacer que el indicador de actividad se detenga solo cuando aparece la página web? ¿Cómo agrego palabras al indicador de actividad como "Cargando"?

// Create the UIWebView UIWebView *webView = [[UIWebView alloc] initWithFrame:self.view.bounds]; [self.view addSubview:webView]; // Start the throbber to check if the user exists UIActivityIndicatorView *activityView=[[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray]; activityView.center = CGPointMake([self screenWidth] / 2.0, 370.0); [activityView startAnimating]; activityView.tag = 100; [self.view addSubview:activityView]; NSString* url = @"http://google.com"; NSURL* nsUrl = [NSURL URLWithString:url]; NSURLRequest* request = [NSURLRequest requestWithURL:nsUrl cachePolicy:NSURLRequestReloadIgnoringLocalAndRemoteCacheData timeoutInterval:30]; // Remove activity view UIView *viewToRemove = [self.view viewWithTag:100]; //[viewToRemove removeFromSuperview]; [webView loadRequest:request];


¿Cómo puedo hacer que el indicador de actividad se detenga solo cuando aparece la página web?

Su objeto puede convertirse en delegate para que webView escuche el método de delegado -webViewDidFinishLoad . Asi que:

- (void)viewDidLoad { // Create the UIWebView UIWebView *webView = [[UIWebView alloc] initWithFrame:self.view.bounds]; webView.delegate = self; // Here is the key ... } ... - (void)webViewDidFinishLoad:(UIWebView *)webView { [self.view viewWithTag:100].hidden = YES; }

También puede implementar -webViewDidStartLoad: para mostrar el indicador de actividad en lugar de mostrarlo en el método -viewDidLoad .

¿Cómo agrego palabras al indicador de actividad como "Cargando"?

Debe crear una UILabel separada, no hay manera de agregar texto a UIActivityIndicatorView estándar


Encabezamiento:

UIView * indicatorView; UIActivityIndicatorView *activityIndicator;

ViewDidLoad:

@property UILabel* label; -(void)viewDidLoad { [super viewDidLoad]; indicatorView=[[UIView alloc]initWithFrame:CGRectMake(self.mapView.frame.size.width/2-40, self.mapView.frame.size.height/2-30 , 80, 60)]; indicatorView.backgroundColor=[[UIColor blackColor]colorWithAlphaComponent:0.7f]; [self.mapView addSubview:indicatorView]; indicatorView.layer.cornerRadius=5; [[indicatorView layer] setBorderWidth:1.0f]; [[indicatorView layer] setBorderColor:[UIColor whiteColor].CGColor]; indicatorView.clipsToBounds=YES; activityIndicator = [[UIActivityIndicatorView alloc]initWithFrame:CGRectMake(indicatorView.frame.size.width/2-15, 8, 30, 30)]; [activityIndicator setActivityIndicatorViewStyle:UIActivityIndicatorViewStyleWhiteLarge]; //activityIndicator.backgroundColor=[UIColor greenColor]; [indicatorView addSubview:activityIndicator]; [activityIndicator startAnimating]; UILabel *loadingLbl = [[UILabel alloc]initWithFrame:CGRectMake(0, indicatorView.frame.size.height-22, indicatorView.frame.size.width, 20)]; loadingLbl.text = @" Loading..."; //loadingLbl.backgroundColor=[UIColor redColor]; loadingLbl.textColor = [UIColor whiteColor]; loadingLbl.textAlignment = NSTextAlignmentCenter; loadingLbl.font = [UIFont fontWithName:@"YanaR-Bold" size:10]; [loadingLbl setFont:[UIFont boldSystemFontOfSize:10.0f]]; [indicatorView addSubview:loadingLbl];


Hacer una vista de carga:

@implementation yourViewController{; UIView* loadingView; }

En su viewDidLoad :

loadingView = [[UIView alloc]initWithFrame:CGRectMake(100, 400, 80, 80)]; loadingView.backgroundColor = [UIColor colorWithWhite:0. alpha:0.6]; loadingView.layer.cornerRadius = 5; UIActivityIndicatorView *activityView=[[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge]; activityView.center = CGPointMake(loadingView.frame.size.width / 2.0, 35); [activityView startAnimating]; activityView.tag = 100; [loadingView addSubview:activityView]; UILabel* lblLoading = [[UILabel alloc]initWithFrame:CGRectMake(0, 48, 80, 30)]; lblLoading.text = @"Loading..."; lblLoading.textColor = [UIColor whiteColor]; lblLoading.font = [UIFont fontWithName:lblLoading.font.fontName size:15]; lblLoading.textAlignment = NSTextAlignmentCenter; [loadingView addSubview:lblLoading]; [self.view addSubview:loadingView];

Esta vista se verá así:

Tenga cuidado, si desea utilizar cornerRadius, debe importar el <QuartzCore/QuartzCore.h> y, antes de importar, agregue el marco QuartzCore a su proyecto.

Detectar cuando el webview deja de cargar:

- (void)webViewDidFinishLoad:(UIWebView *)webView { [loadingView setHidden:YES]; }

tienes que implementar el protocolo UIWebViewDelegate , y

webView.delegate = self;

y hazlo visible:

- (void)webViewDidStartLoad:(UIWebView *)webView { [loadingView setHidden:NO]; }


Si estás buscando esto en Swift, aquí está:

var boxView = UIView() func webViewDidStartLoad(webView_Pages: UIWebView) { // Box config: boxView = UIView(frame: CGRect(x: 115, y: 110, width: 80, height: 80)) boxView.backgroundColor = UIColor.blackColor() boxView.alpha = 0.9 boxView.layer.cornerRadius = 10 // Spin config: let activityView = UIActivityIndicatorView(activityIndicatorStyle: UIActivityIndicatorViewStyle.WhiteLarge) activityView.frame = CGRect(x: 20, y: 12, width: 40, height: 40) activityView.startAnimating() // Text config: let textLabel = UILabel(frame: CGRect(x: 0, y: 50, width: 80, height: 30)) textLabel.textColor = UIColor.whiteColor() textLabel.textAlignment = .Center textLabel.font = UIFont(name: textLabel.font.fontName, size: 13) textLabel.text = "Loading..." // Activate: boxView.addSubview(activityView) boxView.addSubview(textLabel) view.addSubview(boxView) } func webViewDidFinishLoad(webView_Pages: UIWebView) { // Removes it: boxView.removeFromSuperview() }

No olvides llamar a UIWebViewDelegate:

class ViewController: UIViewController, UIWebViewDelegate {

Y establezca el delegado para la vista web en viewDidLoad:

webView.delegate = self