2010-05-26 38 views

Trả lời

12

Bạn có thể triển khai Ủy quyền UIWebView và chặn bất kỳ tải trang nào đã cố gắng. Bằng cách thiết lập một url tùy chỉnh, bạn có thể chuyển một tin nhắn tới Objective C, có thể khởi chạy camera. Để gửi dữ liệu trở lại web weiw, bạn có thể bắt đầu một tải mới (như tôi làm trong ví dụ của tôi), hoặc chuyển vào một số javascript bằng cách sử dụng một phương thức khác trên UIWebView.

Dưới đây là một ví dụ làm việc, tôi chỉ viết:

#import "WebViewCamAppDelegate.h" 
    #import <UIKit/UIKit.h> 
    @interface uiwebviewcameraAppDelegate : NSObject <UIApplicationDelegate, UINavigationControllerDelegate, UIImagePickerControllerDelegate, UIWebViewDelegate> { 
     UIWindow *window; 
    UIViewController *viewController; 
    UIWebView *webView; 
    } 

    @property (nonatomic, retain) IBOutlet UIWindow *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. 
    static NSString *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 
+0

Hi Brad, bạn phải làm điều này trong các đại biểu ứng dụng hoặc chỉ có bao giờ bạn thiết lập webview của bạn lên? – Rob85

Các vấn đề liên quan