Vous pouvez mettre en œuvre la UIWebView Délégué et d'intercepter toute tentative de chargement de la page. Par la définition d'une url personnalisée, vous pouvez passer un message à Objective-C, qui peut lancer l'appareil photo. Pour envoyer des données vers le web weiw vous pouvez lancer une nouvelle charge (comme je le fais dans mon exemple), ou de passer en javascript à l'aide d'une autre méthode UIWebView.
Voici un exemple de travail, j'ai juste écrit:
#import "WebViewCamAppDelegate.h"#import <UIKit/UIKit.h>@interface uiwebviewcameraAppDelegate :NSObject<UIApplicationDelegate,UINavigationControllerDelegate,UIImagePickerControllerDelegate,UIWebViewDelegate>{UIWindow*window;UIViewController*viewController;UIWebView*webView;}@property(nonatomic, retain)IBOutletUIWindow*window;@end@implementation uiwebviewcameraAppDelegate
@synthesize window;//This is the HTML we initially show in the WebView. Note the url "showcamera:" is one I//invented with the intent to intercept it to show the camera.staticNSString*htmlString =@"<br><A href=\"showcamera:\">Show Camera</a>";//Pretty Basic stuff. We set the UIWebView Delegate so we can intercept the call and set up //a ViewController so we can animate the UIImagePicker-(BOOL)application:(UIApplication*)application didFinishLaunchingWithOptions:(NSDictionary*)launchOptions {
viewController =[[UIViewController alloc] init];
webView =[[UIWebView alloc] initWithFrame:window.bounds];[webView loadHTMLString:htmlString baseURL:nil];
webView.delegate=self;[viewController.view addSubview:webView];[window addSubview:viewController.view];[window makeKeyAndVisible];return YES;}//Note: I check to make sure the camera is available. If it is not (iPod touch or Simulator) I show the photo library instead.-(void) showCamera {UIImagePickerController*imagePicker =[[UIImagePickerController alloc] init];if([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]){
imagePicker.sourceType =UIImagePickerControllerSourceTypeCamera;}else{
imagePicker.sourceType =UIImagePickerControllerSourceTypePhotoLibrary;}
imagePicker.delegate=self;[viewController presentModalViewController:imagePicker animated:YES];}//Here we intercept any time the webview tries to load a document. When the user hits our "showcamera: url" we go to work.-(BOOL)webView:(UIWebView*)webView shouldStartLoadWithRequest:(NSURLRequest*)request navigationType:(UIWebViewNavigationType)navigationType {if([[[request URL] scheme] isEqualToString:@"showcamera"]){[self showCamera];return NO;}return YES;}//After the imagepicker has done it's thing, we pass the data back to the webview to be displayed.//If we wanted to be fancy here, we could have done this via Javascript so we could dynamically insert an image without reloading the page.-(void)imagePickerController:(UIImagePickerController*)picker didFinishPickingMediaWithInfo:(NSDictionary*)info {[viewController dismissModalViewControllerAnimated:YES];UIImage* image =[info objectForKey:UIImagePickerControllerOriginalImage];NSData*imageData =UIImageJPEGRepresentation(image,0.5);[webView loadData:imageData MIMEType:@"image/jpeg" textEncodingName:@"UTF-8" baseURL:nil];}-(void)dealloc {[viewController release];[webView release];[window release];[super dealloc];}@end
Salut Brad, vous avez pour ce faire, dans l'application d'un délégué ou là où jamais vous définissez votre webview?
Vous pouvez mettre en œuvre la UIWebView Délégué et d'intercepter toute tentative de chargement de la page. Par la définition d'une url personnalisée, vous pouvez passer un message à Objective-C, qui peut lancer l'appareil photo. Pour envoyer des données vers le web weiw vous pouvez lancer une nouvelle charge (comme je le fais dans mon exemple), ou de passer en javascript à l'aide d'une autre méthode UIWebView.
Voici un exemple de travail, j'ai juste écrit:
OriginalL'auteur Brad The App Guy