2015-07-21 3 views
0

У меня есть UIImagePicker, который продолжает появляться после того, как я выбрал изображение. Мой код проверяет камеру, а затем отображает UIImagePicker на основании того, что в симуляторе нет камеры.UIImagePicker появляется после выбора изображения

- (void)viewWillAppear:(BOOL)animated { 
    [super viewWillAppear:animated]; 
    self.imagePicker = [[UIImagePickerController alloc] init]; 
    self.imagePicker.delegate = self; 
    self.imagePicker.allowsEditing = YES; 

    if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) { 
     self.imagePicker.sourceType = UIImagePickerControllerSourceTypeCamera; 
    } 
    else { 
     self.imagePicker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary; 
    } 
    self.imagePicker.mediaTypes = [NSArray arrayWithObjects:(NSString *)kUTTypeImage, nil]; 
    [self presentViewController:self.imagePicker animated:NO completion:nil]; 
} 

- (void)viewWillDisappear:(BOOL)animated { 
    [super viewWillDisappear:animated]; 
    [self clear]; 
} 

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info { 
    UIImage *chosenImage = info[UIImagePickerControllerEditedImage]; 
    self.imageView.image = chosenImage; 
    [self dismissViewControllerAnimated:YES completion:nil]; 
} 

Нужно ли мне принудительно перезагрузить мой первоначальный вид? Есть ли более разумный способ сделать это?

EDIT

Я добавил кнопку Bar в панели навигации, и им стрельбы мой код на это действие. Это устранило проблему и кажется лучшим способом сделать это.

ответ

2

Вероятно, viewWillAppear вызывается каждый раз, когда UIImagePickerController исчезает, потому что контроллер вида, в который вы помещаете код, снова становится видимым.

Вы можете попробовать создать UIImagePickerController в viewDidLoad или использовать свойство boolean, чтобы проверить, вызывает ли оно его в первый раз.

+0

Ударьте мой ответ не менее чем за 30 секунд! :) –

+0

Хорошо, что мы согласны с решением! –

1

Ваш код вызывается методом viewWillAppear вашего контроллера вида.

При этом загорается контроллер вида. Когда вы его отклоняете, ваш контроллер просмотра не обнаружен. Вызывается метод viewWillAppear, который отображает новый подборщик изображений, и цикл продолжается ...

Смежные вопросы