iOS: проблема с UIImagePickerController - PullRequest
0 голосов
/ 26 марта 2012

Я пытаюсь использовать UIImagePickerController, чтобы получить фотографию от пользователей Фотографии на их iPhone / iPad.Этот код прекрасно работает на iPhone, но когда я запускаю его на iPad, отладчик выдает мне сообщение « Завершение приложения из-за необработанного исключения« NSInvalidArgumentException », причина:« На iPad UIImagePickerController должен быть представлен через UIPopoverController ».Я очень новичок в Objective-C, поэтому я не уверен, как отредактировать этот код для использования UIPopoverController при его запуске на iPad.Я бы предпочел не создавать 2 новых View Controller, поэтому мне было интересно, знает ли кто-нибудь, какой код мне нужно добавить, чтобы он работал на iPhone и iPad.Вот код в моих контроллерах представления:

ViewController.h:

    @interface PhotoViewController : UIViewController <UINavigationControllerDelegate, UIImagePickerControllerDelegate> {
        UIButton *grabButton;
        UIImageView *image;
        UIImagePickerController *imgPicker;
    }
    @property (strong, nonatomic) IBOutlet UIButton *grabButton;
    @property (strong, nonatomic) IBOutlet UIImageView *image;
    @property (strong, nonatomic) UIImagePickerController *imgPicker;

    - (IBAction)grabImage;

    @end

ViewController.m:

    #import "PhotoViewController.h"


    @implementation PhotoViewController
    @synthesize grabButton;
    @synthesize image;
    @synthesize imgPicker;

    - (IBAction)grabImage {
        [self presentModalViewController:self.imgPicker animated:YES];
    }

    - (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingImage:(UIImage *)img editingInfo:(NSDictionary *)editInfo {
        image.image = img;
        [[picker parentViewController] dismissModalViewControllerAnimated:YES];
    }

    - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
    {
        self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
        if (self) {
            self.title = NSLocalizedString(@"Photo Gallery", @"Photo Gallery");
            self.tabBarItem.image = [UIImage imageNamed:@"42-photos.png"];
        }
        return self;
    }

    - (void)viewDidLoad
    {
        self.imgPicker = [[UIImagePickerController alloc] init];
        self.imgPicker.allowsImageEditing = YES;
        self.imgPicker.delegate = self;
        self.imgPicker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
        [super viewDidLoad];
    }

Заранее спасибо!

Ответы [ 3 ]

6 голосов
/ 26 марта 2012

У вас есть ответ через это сообщение об ошибке!

Использование UIPopOverController с UIImagePicker для iPad.

Если вы хотите узнать, как использовать UIPopOverController, вы можете посмотреть этот учебник !

Еще одно руководство на YouTube - http://www.youtube.com/watch?v=6Gc3kxVwfmE

2 голосов
/ 26 марта 2012

Как упоминал Леголас, в приложении для iPad вы должны использовать UIPopOverController для представления imagePicker. Я обычно не фанат наличия в моем приложении кода, который выполняет задачи в зависимости от типа устройства, но если вы не найдете лучшего решения, вы можете сделать следующее.

if ([[UIDevice currentDevice].model isEqual:@"iPad"])
{
   // Display image picker in a popover
}
else
{
   // display imagePicker as a modal
}

Проверьте документацию для моделей устройств: http://developer.apple.com/library/ios/#documentation/uikit/reference/UIDevice_Class/Reference/UIDevice.html

0 голосов
/ 26 июня 2013

Это сработало для меня.Пожалуйста, попробуйте ниже код

if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad) {
    UIPopoverController *popover = [[UIPopoverController alloc] initWithContentViewController:self.imgpicker];
    popover.delegate =self;
    [popover presentPopoverFromRect:self.view.bounds inView:self.view permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];}else{
[self presentModalViewController:self.imgpicker animated:YES];
}
...