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”:

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

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”

Andrea Busi | @bubidevs

Laureato in Ingegneria Informatica, ho fondato nel 2008 questo piccolo blog, in cui racconto le mie esperienze e i miei pensieri sul mondo dell'informatica. Nella vita mi occupo di sviluppo software, e nel tempo libero continuo a coltivare la mia passione per il mondo iOS.

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

  1. skip ha detto:

    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!!

  2. Fabry ha detto:

    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

  3. Carlo ha detto:

    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

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

*