UIImagePickerController проблема? - PullRequest
       11

UIImagePickerController проблема?

1 голос
/ 02 декабря 2011

Это мой код для представления 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, ничего не происходит (обычно он выбирает изображение, затем отключает контроллер)

Есть ли какая-то причина, почему что-то идет не так?

Спасибо!

// 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];
    }
}

1 Ответ

6 голосов
/ 02 декабря 2011

Ознакомьтесь с документацией для parentViewController в справочнике по классам UIViewController . Именно этот маленький кусочек.

До iOS 5.0, если у представления не было родительского контроллера представления и был представлен модально, контроллер представления, который представлял это будет возвращено. Это больше не так. Вы можете получить представление контроллера представления с использованием presentingViewController свойство.

В этом случае я ожидаю, что на iOS 5 значение parentViewController равно нулю, и поэтому контроллер не отклонит его. Попробуйте заменить parentViewController на presentingViewController.

Обновление: Вам придется проверить наличие presentingViewController на UIViewController, чтобы обеспечить поведение для версий iOS <5.0. </p>

UIViewController *dismissingController = nil;

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

[dismissingController dismissModalViewControllerAnimated:YES];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...