Comment download des files depuis UIWebView et ouvrir à nouveau

Comment puis-je créer un "gestionnaire de téléchargement" qui détecterait quand un lien que vous tapez (dans un UIWebView) a le file se terminant par ".pdf", ".png", ".jpeg", ".tiff", ".gif" , ".doc", ".docx", ".ppt", ".pptx", ".xls" et ".xlsx" puis ouvre une UIActionSheet vous demandant si vous souhaitez download ou ouvrir. Si vous select le téléchargement, le file sera téléchargé sur l'appareil.

Une autre section de l'application aurait une list de files téléchargés dans un UITableView et lorsque vous appuyez dessus, ils apparaîtront dans un UIWebView, mais bien sûr hors ligne car ils se chargeraient localement car ils auraient été téléchargés.

Voir http://itunes.apple.com/gb/app/downloads-lite-downloader/id349275540?mt=8 pour une meilleure compréhension de ce que j'essaie de faire.

Quelle est la meilleure façon de faire cela?

Je vous remercie,

James

Utilisez la méthode - (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType dans le délégué de votre UiWebView pour déterminer quand il veut charger la ressource.

Lorsque la méthode est appelée, il suffit d'parsingr l'URL à partir de la (NSURLRequest *)request paramètre (NSURLRequest *)request et de renvoyer NO si c'est un de votre choix et de continuer avec votre logique (UIActionSheet) ou YES si l'user vient de cliquer sur un simple lien vers un file HTML.

Logique?

Edit_: pour mieux comprendre un exemple de code rapide

 - (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType { if(navigationType == UIWebViewNavigationTypeLinkClicked) { NSURL *requestedURL = [request URL]; // ...Check if the URL points to a file you're looking for... // Then load the file NSData *fileData = [[NSData alloc] initWithContentsOfURL:requestedURL; // Get the path to the App's Documents directory NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSSsortingng *documentsDirectory = [paths objectAtIndex:0]; // Get documents folder [fileData writeToFile:[NSSsortingng ssortingngWithFormat:@"%@/%@", documentsDirectory, [requestedURL lastPathComponent]] atomically:YES]; } } 

Edit2_: J'ai mis à jour l'exemple de code après notre discussion sur vos problèmes dans le chat:

 - (IBAction)saveFile:(id)sender { // Get the URL of the loaded ressource NSURL *theRessourcesURL = [[webView request] URL]; NSSsortingng *fileExtension = [theRessourcesURL pathExtension]; if ([fileExtension isEqualToSsortingng:@"png"] || [fileExtension isEqualToSsortingng:@"jpg"]) { // Get the filename of the loaded ressource form the UIWebView's request URL NSSsortingng *filename = [theRessourcesURL lastPathComponent]; NSLog(@"Filename: %@", filename); // Get the path to the App's Documents directory NSSsortingng *docPath = [self documentsDirectoryPath]; // Combine the filename and the path to the documents dir into the full path NSSsortingng *pathToDownloadTo = [NSSsortingng ssortingngWithFormat:@"%@/%@", docPath, filename]; // Load the file from the remote server NSData *tmp = [NSData dataWithContentsOfURL:theRessourcesURL]; // Save the loaded data if loaded successfully if (tmp != nil) { NSError *error = nil; // Write the contents of our tmp object into a file [tmp writeToFile:pathToDownloadTo options:NSDataWritingAtomic error:&error]; if (error != nil) { NSLog(@"Failed to save the file: %@", [error description]); } else { // Display an UIAlertView that shows the users we saved the file :) UIAlertView *filenameAlert = [[UIAlertView alloc] initWithTitle:@"File saved" message:[NSSsortingng ssortingngWithFormat:@"The file %@ has been saved.", filename] delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil]; [filenameAlert show]; [filenameAlert release]; } } else { // File could notbe loaded -> handle errors } } else { // File type not supported } } /** Just a small helper function that returns the path to our Documents directory **/ - (NSSsortingng *)documentsDirectoryPath { NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSSsortingng *documentsDirectoryPath = [paths objectAtIndex:0]; return documentsDirectoryPath; }