首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >iOS UIImagePickerController和ModalViewController

iOS UIImagePickerController和ModalViewController
EN

Stack Overflow用户
提问于 2011-04-17 01:56:58
回答 1查看 1.4K关注 0票数 1

我已经写了一段代码,运行在基于PhoneGap的应用程序中。该代码有一个插件,当使用以下代码单击网页上的某个绑定按钮时,该插件将启动UIImagePickerController。

PhotoSelectorCommand.h

代码语言:javascript
复制
#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

代码语言:javascript
复制
#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

代码语言:javascript
复制
#import <UIKit/UIKit.h>

@interface PhotoUploaderViewController : UIViewController {

}

@end

PhotoSelectorViewController.m

代码语言:javascript
复制
#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那样呈现另一个视图。知道为什么吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-04-18 00:48:30

我不知道你为什么要解雇picker?此方法仅在解除控制器后才会调用。另外,你还发布了两次picker和removerFromSuperView?请尝试使用以下代码,并查看注释行。

代码语言:javascript
复制
- (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
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5688437

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档