iOS7 раскадровка изображений не работает:(

Я пытаюсь настроить imagePicker в новом проекте iOS7 Xcode, использующем раскадровки, но не могу найти никаких примеров в Интернете, пока не найду следующий код.

Я настроил его так, чтобы при нажатии кнопки он использовал модальное нажатие, чтобы перейти к виду, который имеет класс "UIImagePickerController" который, по-видимому, вызывает в коде выбора изображений.

Однако, когда приложение запускается, оно ничего не загружает после нажатия на кнопку, чтобы позволить приложению получить доступ к вашим фотографиям, есть ли шанс какой-нибудь помощи, пожалуйста?

Снимок экрана с ошибкой: https://pbs.twimg.com/media/Bdy7v9JCAAABpvS.jpg:large

настройка интерфейса:

@interface ridecount_AddRide_ViewController : UIViewController<UIImagePickerControllerDelegate, UINavigationControllerDelegate>{

код:

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{
    UIImagePickerController *controller = [segue destinationViewController];
    controller.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
    controller.delegate = self;
}
-(void)imagePickerControllerDidCancel:(UIImagePickerController *)picker{
    [self dismissViewControllerAnimated:YES completion:nil];
}
-(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info{
    [self dismissViewControllerAnimated:YES completion:nil];
    UIImage *image = [info objectForKey:UIImagePickerControllerOriginalImage];
    [[self.view viewWithTag:100023] removeFromSuperview];
    UIImageView * imageView = [[UIImageView alloc] initWithFrame:CGRectMake(320/2-200/2, 10, 100, 100)];
    imageView.tag = 100023;
    imageView.contentMode = UIViewContentModeScaleAspectFit;
    imageView.image = image;
    [self.view addSubview:imageView];
}

4 ответа

Решение

Инициализировать контроллер UIImagePickerController *controller = [[segue destinationViewController] init];

Для SWIFT - немного другой подход

//Init property
var imagePicker = UIImagePickerController()

затем назначьте

override func prepareForSegue(segue:UIStoryboardSegue!, sender: AnyObject!)
{
    imagePicker = segue.destinationViewController as UIImagePickerController
    imagePicker.sourceType = UIImagePickerControllerSourceType.PhotoLibrary
    imagePicker.allowsEditing = false
    imagePicker.delegate = self
}

У меня такая же проблема. UIImagePickerController объект, который был инициализирован из раскадровки, работал правильно только тогда, когда availableMediaTypesForSourceType был установлен на UIImagePickerControllerSourceTypeCamera,

Если вы хотите сохранить prepareForSegue: Функциональность вы можете удалить UIImagePickerController из раскадровки и создайте его программно, используя следующий код:

- (void)showCameraRollController
{
    UIImagePickerController *imagePickerController = [[UIImagePickerController alloc] init];
    UIStoryboardSegue *segue = [UIStoryboardSegue segueWithIdentifier:@"CameraRollController" source:self destination:imagePickerController performHandler:^{
        [self presentViewController:imagePickerController animated:YES completion:NULL];
    }];
    [self prepareForSegue:segue sender:self];
    [segue perform];
}

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if ([segue.identifier isEqualToString:@"CameraRollController"]) {
        UIImagePickerController *imagePickerController = [segue destinationViewController];
        imagePickerController.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
        imagePickerController.delegate = self;
    }
}

Возможно, другой альтернативой является создание подкласса UIImagePickerController и добавление в подкласс:

- (instancetype)initWithCoder:(NSCoder *)aDecoder { return [super init]; }

Казалось, работает.

Другие вопросы по тегам