Raccogliere l'approccio intelligente di Gilbert: Se modificato, funziona con i reindirizzamenti (qualcosa che non è in grado di fare finora, come ha sottolineato Mharper).
Prima di caricare la richiesta, salvare l'URL desiderato e impostare una variabile membro booleano chiamato _saveURL
per indicare che l'URL di reindirizzamento sarà salvato (si vedrà il corretto utilizzo di queste due variabili più tardi):
- (void)my_loadURL:(NSURL *)url
{
NSURLRequest *request = [NSURLRequest requestWithURL:url]; // create the request
[_desiredURL release]; // clear up the previous value (assuming -my_loadURL: may be called multiple times)
_desiredURL = [url retain]; // store the desired URL (will be used later)
_saveURL = YES; // will also be used later
[_webView loadRequest:request]; // start loading the request
}
(la compilazione se in un conteggio automatico di riferimento (ARC) ambiente trattenere e rilasciare le chiamate, naturalmente, non sarà necessario.)
Ora nel delegato di callback -webViewDidFinishLoad:
, verificare se il reindirizzamento ha già verificato testando se l'URL della richiesta corrente della vista web è diverso da l'URL desiderato. In tal caso, salva l'URL di reindirizzamento in una variabile membro _firstURL
. Questo è anche il punto in cui _saveURL
entra in posizione. È per evitare di sovrascrivere _firstURL
ogni volta che viene chiamato questo metodo delegato. Inoltre, abilita o disabilita i pulsanti avanti e indietro proprio come facevamo prima.
- (void)webViewDidFinishLoad:(UIWebView *)webView
{
// grab the URL currently being loaded
NSURL *currentURL = [webview.request URL];
// check whether we are supposed to save the redirect URL and
// whether redirection has taken place yet
if (_saveURL && ![currentURL isEqual:_desiredURL]) {
[_firstURL release];
_firstURL = [currentURL retain];
}
// adjust the enabled-state of the back and forward buttons just like before
_backButton.enabled = _webView.canGoBack && ![currentURL isEqual:_firstURL];
_forwardButton.enabled = _webView.canGoForward;
}
(Ancora, trattenere e rilasciare non sono necessari con ARC abilitato.)
Tuttavia, c'è uno svantaggio principale di questo metodo. Funziona solo se sai per certo che l'URL passato a my_loadURL:
verrà reindirizzato. In caso contrario, la variabile _firstURL
verrà impostata diversamente. Quindi se non riesci a capire se l'URL corrispondente verrà reindirizzato, allora questo approccio non si adatta alle tue esigenze. Ad ogni modo, si adattava ai miei bisogni, e spero di poter aiutare anche qualcun altro.
Aggiornamento: È possibile migliorare questo metodo facendo cadere tutto questo si occupano di _desiredURL significato non salvare l'URL desiderato in -my_loadURL:
e in -webViewDidFinishLoad:
solo dire if(_saveURL)
. In questo modo, funzionerà per i siti Web che non reindirizzano affatto o che reindirizzano all'istante.
Codice molto subdolo! Vogliamo che l'app entri nell'app store, quindi questo non ci giova. Mark corretto perché hai detto che non c'era un modo ufficiale. Peccato – zsniperx
Senza dubbio, oggi sono stato respinto per aver usato questo codice esatto. – bendytree
Apple ha appena rifiutato una delle mie app per utilizzare questo framework privato. – Marsman