XCode Tips&Tricks #11 – Controllare l’inizio e la fine del caricamento di una UIWebView

Oggi vi propongo un nuovo tips di XCode, che potrebbe non avere tantissima utilità (in alcuni casi), ma potrebbe aggiungere un “tocco di classe” alle vostre applicazioni.

Vedremo, infatti, come capire quando una UIWebView inizia il caricamento  della pagina web (o meglio, quandi inizia una URLRequest) e quando la finisce.

Per controllare questi due aspetti non dovrete far altro che implementare nella vostra classe il protocollo “UIWebViewDelegate”:

@interface SingoloFeedSafariViewController : UIViewController  {

e inserire, poi, questi due metodi nel file .m di implementazione della classe:

- (void)webViewDidStartLoad:(UIWebView *)view{
	[spinner startAnimating];
}

- (void)webViewDidFinishLoad:(UIWebView *)view{
	[spinner stopAnimating];
}

Io ho semplicemente avviato e fermato una “UIActivityIndicatorView”, che mostrerà così all’utente il progresso del caricamento. Ecco due screen che vi mostrano questo semplice codice in funzione, nella prima immagine vedete la rotella attiva, mentre al file caricamento è ferma e non viene, ovviamente, visualizzata.

Spero possa tornarvi utile, al prossimo appuntamento con “XCode Tips&Tricks”

Ingegnere informatico e sviluppatore freelance, mi occupo da anni di sviluppo per iOS (ma non solo). Dal 2008 scrivo su questo piccolo blog (con qualche lunga pausa), in cui parlo di programmazione e di qualsiasi altra cosa che mi diverta.

3 comments On XCode Tips&Tricks #11 – Controllare l’inizio e la fine del caricamento di una UIWebView

  • Ciao,
    questo tip è proprio quello che stavo cercando!
    ho un unico problema, io devo associare la visualizzazione dello UIActivityIndicatorView al tap del bottone di refresh della tableView della mia app.

    Il mio bottone è il seguente: UIBarButtonItem *refreshButton tramite il quale richiamo la funzione – (void)refreshTable{,
    sapresti gentilmente indicarmi la strada da seguire?

    grazie mille!!

  • Devi scrivere all interno della funzione associata al tuo bottone, l’operazione corrispondente a quanto desideri, che a quanto mi sembra è semplicemente:

    [nomeActivityIndicatorView startAnimating];

    questo è tutto XD

  • Ciao scusa ma sono veramente alle prime armi con la programmazione apple…non riesco a capire come implementare il delegato della UIWebview e poi a richiamarlo o meglio nella @interface gli metto e poi nel file .m creo i due venti come sopra ma non succede nulla lo spin sta fermo.

    Ecco il mio codice del file .m

    #import “BSmartViewController.h”

    @implementation BSmartViewController

    @synthesize webDisplayBSmart, activityIndicator;

    /*
    // The designated initializer. Override to perform setup that is required before the view is loaded.
    – (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
    if ((self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil])) {
    // Custom initialization
    }
    return self;
    }
    */

    /*
    // Implement loadView to create a view hierarchy programmatically, without using a nib.
    – (void)loadView {
    }
    */

    // Implement viewDidLoad to do additional setup after loading the view, typically from a nib.
    – (void)viewDidLoad {

    NSString *urlAddress = @”http://www.google.it”;

    //Create a URL object.
    NSURL *url = [NSURL URLWithString:urlAddress];

    //URL Requst Object
    NSURLRequest *requestObj = [NSURLRequest requestWithURL:url];

    //Load the request in the UIWebView.
    [webDisplayBSmart loadRequest:requestObj];

    [super viewDidLoad];
    }

    – (void) webViewDidStartLoad:(UIWebView *)view {

    [activityIndicator startAnimating];
    }

    – (void) webViewDidFinishLoad:(UIWebView *)view {
    [activityIndicator stopAnimating];
    }

    // Override to allow orientations other than the default portrait orientation.
    – (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
    return YES;
    }

    – (void)didReceiveMemoryWarning {
    // Releases the view if it doesn’t have a superview.
    [super didReceiveMemoryWarning];

    // Release any cached data, images, etc that aren’t in use.
    }

    – (void)viewDidUnload {
    // Release any retained subviews of the main view.
    // e.g. self.myOutlet = nil;
    }

    – (void)dealloc {
    [webDisplayBSmart release];
    [super dealloc];
    }

    @end

    ed il codice del file .h

    #import

    @interface BSmartViewController : UIViewController {
    IBOutlet UIWebView *webDisplayBSmart;
    IBOutlet UIActivityIndicatorView *activityIndicator;
    }
    @property(nonatomic,retain) UIWebView *webDisplayBSmart;
    @property(nonatomic,retain) UIActivityIndicatorView *activityIndicator;
    @end

    Cosa c’è di sbagliato in questo codice? mi sapreste aiutare?

    Grazie mille

Leave a Reply to Carlo Cancel Reply

Your email address will not be published.

Site Footer