objective-c - UIImagePickerController 问题?

标签 objective-c ios camera uiimagepickercontroller

这是我展示 UIImagePickerController 的代码:

// Show the media browser with our settings, then the browser will call our delegate if needed
- (BOOL) startMediaBrowserFromViewController: (UIViewController*) controller
                               usingDelegate: (id <UIImagePickerControllerDelegate,
                                               UINavigationControllerDelegate>) delegate {

    if (([UIImagePickerController isSourceTypeAvailable:
          UIImagePickerControllerSourceTypeSavedPhotosAlbum] == NO)
        || (delegate == nil)
        || (controller == nil))
        return NO;

    UIImagePickerController *mediaUI = [[[UIImagePickerController alloc] init] autorelease];
    mediaUI.sourceType = UIImagePickerControllerSourceTypeSavedPhotosAlbum;

    // Check for images type
    NSArray * availableTypes = [UIImagePickerController availableMediaTypesForSourceType:UIImagePickerControllerSourceTypeSavedPhotosAlbum];
    BOOL imgsOnlyAvailable = NO;
    // Check if we have only images 
    for (int i = 0; i < [availableTypes count]; i++) {
        // Convert the type
        CFStringRef type = (CFStringRef) [availableTypes objectAtIndex:i];
        if (CFStringCompare ((CFStringRef) type, kUTTypeImage, 0) == kCFCompareEqualTo) {
            // We have images
            imgsOnlyAvailable = YES;
            break;
        }
    }

    // Check if they are available
    if (imgsOnlyAvailable == NO) 
        return NO;

    // Displays only saved pictures from the Camera Roll album.
    mediaUI.mediaTypes = [NSArray arrayWithObject:(id) kUTTypeImage];

    // Hides the controls for moving & scaling pictures, or for
    // trimming movies. To instead show the controls, use YES.
    mediaUI.allowsEditing = NO;

    mediaUI.delegate = delegate;

    [controller presentModalViewController: mediaUI animated: YES];
    return YES;
}

// Picker delegate
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {

    NSString *mediaType = [info objectForKey: UIImagePickerControllerMediaType];
    UIImage *originalImage;

    // Handle a still image picked from a photo album
    if (CFStringCompare ((CFStringRef) mediaType, kUTTypeImage, 0)
        == kCFCompareEqualTo) {

        originalImage = (UIImage *) [info objectForKey:
                                     UIImagePickerControllerOriginalImage];    
        // Set image
        self.imgPic.image = originalImage;

        // Now set the button to enabled
        self.btnToText.enabled = YES;
    }

    // Hide picker selector
    [[picker parentViewController] dismissModalViewControllerAnimated: YES];
    [picker release];
}

问题是每当我尝试单击 UIImagePickerController 中的图像时,什么都没有发生(通常它选择图像然后会关闭 Controller )

有什么理由会出现这样的问题吗?

谢谢!
// Select the image
- (IBAction)btnSelectFileTouchUp:(id)sender {

    // Start the media browser
    if ([self startMediaBrowserFromViewController:self usingDelegate:self] == NO) {
        // Can't open the media browser
        UIAlertView * alrt = [[UIAlertView alloc] initWithTitle:@"Error" message:@"Can't open the photo media browser in this device" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];

        [alrt show];
        [alrt release];
    }
}

最佳答案

查看 parentViewController 的文档在 UIViewController Class Reference .特别是这个小花絮。

Prior to iOS 5.0, if a view did not have a parent view controller and was being presented modally, the view controller that was presenting it would be returned. This is no longer the case. You can get the presenting view controller using the presentingViewController property.



在这种情况下,我希望 parentViewController在 iOS 5 上为零,这就是 Controller 不会关闭的原因。尝试替换 parentViewControllerpresentingViewController .

更新:您必须检查是否存在 presentingViewControllerUIViewController为 iOS 版本 < 5.0 提供行为。
UIViewController *dismissingController = nil;

if ([self respondsToSelector:@selector(presentingViewController)])
    dismissingController = self.presentingViewController;
else
    dismissingController = self.parentViewController;

[dismissingController dismissModalViewControllerAnimated:YES];

关于objective-c - UIImagePickerController 问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8349228/

相关文章:

ios - 为什么自定义类不能成功调用自己的类方法? iOS

android - 具有拉伸(stretch)宽高比的自定义 Android 相机预览

ios - 更新到 iOS8 后应用程序崩溃

iphone - 使用多个 Facebook 应用 ID 的 iOS 应用

ios - 如何在iOS中反编译框架文件以获取源代码?

opengl - LibGDX 如何使用多个视口(viewport)/相机?

javascript - 使用 HTML JS 在 Android WebView 中打开相机?

objective-c - 如果类没有前缀 `@objc` ,是否可以在 Objective-C 项目中使用用 Swift 编写的 pod?

ios - 如何拦截按键?

ios - 如何设置 subview 的框架