I have written a piece of code which runs inside PhoneGap based app. The code has a plugin which starts UIImagePickerController when some binded button on web page is clicked using following code.
PhotoSelectorCommand.h
#import <Foundation/Foundation.h>
#import "PhoneGapCommand.h"
@interface PhotoSelectorCommand : PhoneGapCommand<UINavigationControllerDelegate, UIImagePickerControllerDelegate> {
NSString *url;
NSString *extra;
}
@property (nonatomic, copy) NSString *url;
@property (nonatomic, copy) NSString *extra;
- (void) startPhotoSelector:(NSMutableArray *)arguments withDict:(NSMutableDictionary *)options;
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info;
- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker;
@end
PhotoSelectorCommand.m
#import "PhotoSelectorCommand.h"
#import "PhoneGapViewController.h"
#import "PhotoUploaderViewController.h"
@implementation PhotoSelectorCommand
@synthesize url;
@synthesize extra;
- (void) startPhotoSelector:(NSMutableArray*)arguments withDict:(NSMutableDictionary*)options // args: url
{
NSUInteger argc = [arguments count];
if (argc < 1) {
return;
}
self.url = [arguments objectAtIndex:0];
if (argc > 1) {
self.extra = [arguments objectAtIndex:1];
}
UIImagePickerController *imagePicker = [[UIImagePickerController alloc] init];
imagePicker.delegate = self;
imagePicker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
PhoneGapViewController* cont = (PhoneGapViewController *)[super appViewController];
[cont presentModalViewController:imagePicker animated:YES];
}
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {
//on selected
[picker dismissModalViewControllerAnimated:YES];
PhotoUploaderViewController *photoUploader = [PhotoUploaderViewController alloc];
PhoneGapViewController* cont = (PhoneGapViewController *)[super appViewController];
[cont presentModalViewController:photoUploader animated:YES];
[photoUploader.view removeFromSuperview];
[picker release];
[picker.view removeFromSuperview];
[picker release];
}
- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker {
//on cancel
NSString *failureCallback = [NSString stringWithFormat:@"PhotoSelector._onError('%@');", @"No image selected."];
[webView stringByEvaluatingJavaScriptFromString:failureCallback];
[picker dismissModalViewControllerAnimated:YES];
[picker.view removeFromSuperview];
[picker release];
}
@end
PhotoSelectorViewController.h
#import <UIKit/UIKit.h>
@interface PhotoUploaderViewController : UIViewController {
}
@end
PhotoSelectorViewController.m
#import "PhotoSelectorViewController.h"
@implementation PhotoSelectorViewController
-(void)init {
}
- (void)viewDidLoad {
[super viewDidLoad];
}
- (void)didReceiveMemoryWarning {
// Releases the view if it doesn't have a superview.
[super didReceiveMemoryWarning];
}
- (void)viewDidUnload {
[super viewDidUnload];
}
- (void)dealloc {
[super dealloc];
}
@end
The above code works till it shows UIImagePickerController where user can pick the image. Once after picking any image the controller goes down but another view isn't being presented like the UIImagePickerController. Any idea why?