我已经写了一段代码,运行在基于PhoneGap的应用程序中。该代码有一个插件,当使用以下代码单击网页上的某个绑定按钮时,该插件将启动UIImagePickerController。
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;
@endPhotoSelectorCommand.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];
}
@endPhotoSelectorViewController.h
#import <UIKit/UIKit.h>
@interface PhotoUploaderViewController : UIViewController {
}
@endPhotoSelectorViewController.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上面的代码一直有效,直到它显示UIImagePickerController,用户可以在其中选择图像。一旦拾取了任何图像,控制器就会关闭,但不会像UIImagePickerController那样呈现另一个视图。知道为什么吗?
发布于 2011-04-18 00:48:30
我不知道你为什么要解雇picker?此方法仅在解除控制器后才会调用。另外,你还发布了两次picker和removerFromSuperView?请尝试使用以下代码,并查看注释行。
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {
//on selected
// [picker dismissModalViewControllerAnimated:YES]; you need not to do this
PhotoUploaderViewController *photoUploader = [PhotoUploaderViewController alloc];
PhoneGapViewController* cont = (PhoneGapViewController *)[super appViewController];
[cont presentModalViewController:photoUploader animated:YES];
// [photoUploader.view removeFromSuperview]; // where you have added this view?
// [picker release]; //you do not own this object..
//[picker.view removeFromSuperview]; // and ?
//[picker release]; // same here
}https://stackoverflow.com/questions/5688437
复制相似问题