2014-11-12 2 views
0

Мое приложение структурировано с контроллером центрального представления, который добавляет от 3 до 4 подвид к основному виду. В одном из дополнительных контроллеров представления я представляю камеру пользователю. Когда я увольняю сборщик изображений, каждое подзапрос, за исключением того, в котором я представляю камеру (контроллер вида), исчезает. Я думаю, это может быть связано с тем, как структурировано приложение и стек представления. Приложение отлично работает при запуске iOS 8 на iPhone и iOS 7 на iPad. У меня эта проблема, только когда я запускаю iOS 8 на iPad. Я убедился, что код соответствует документации Apple о том, как представить и убрать подборщик изображений. Вот код, используемый для представления подборщика изображений.ImagePicker удаление просмотров при увольнении iOS 8

-(IBAction)photoButtonPressed:(id)sender 
{ 

    // Prompt for camera or photo library 
    // Retrieve image and set it as this button's default image 
    if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) { 

     UIImagePickerController *imagePicker = 
     [[UIImagePickerController alloc] init]; 

     imagePicker.delegate = self; 

     imagePicker.sourceType = UIImagePickerControllerSourceTypeCamera; 
     imagePicker.mediaTypes = [NSArray arrayWithObjects: 
            (NSString *) kUTTypeImage, nil]; 

     imagePicker.allowsEditing = NO; 
     imagePicker.modalPresentationStyle = UIModalPresentationFullScreen; //play around with this 

     [self presentViewController:imagePicker animated:YES completion:nil]; 

    } else { 

     UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Camera not found" message:@"There is no camera available on this device." delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil]; 
     [alert show]; 
    } 
} 

код используется, чтобы закрыть

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info 
    { 
     CGSize scaleSize = CGSizeMake(1024.0f, 1280.0f); 
     UIImage *capturedImage; 

     // Handle a still image capture 
     capturedImage = (UIImage *) [info objectForKey: 
            UIImagePickerControllerOriginalImage]; 

     [self dismissViewControllerAnimated:YES completion:nil]; 


     if (capturedImage) { 
      if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad) { 
       photoData = UIImageJPEGRepresentation([capturedImage resizedImage:scaleSize interpolationQuality:kCGInterpolationHigh], 5); 
       photoEntity = nil; 

       [self.takePhotoButton setImage:[UIImage imageWithData:photoData ] forState:UIControlStateNormal]; 


       if ([self isAnyButtonSelected] || ![_answerTextField.text isEqualToString:@""] || !_questionBoolean.hidden) { 
        [Tools enableControl:_saveButton]; 
       } 


      } else { 
       newPhotoData = UIImageJPEGRepresentation([capturedImage resizedImage:scaleSize interpolationQuality:kCGInterpolationHigh], 5); 
       photoEntity = nil; 
      } 
     } 
    } 

И здесь я пытался баловаться с родительскими представлениями и контроллерами в этом методе. Я смог заставить приложение вернуться к контроллеру центрального представления за вычетом текущего контроллера представления, который отвечает за съемку фотографий. Единственная проблема заключается в том, что прикосновение приложения отключено, и мне не хватает одного вида.

- (void) imagePickerControllerDidCancel: (UIImagePickerController *) picker 
{ 
// [self willMoveToParentViewController:nil]; 
// [picker.view removeFromSuperview]; 
// [picker removeFromParentViewController]; 
    [self dismissViewControllerAnimated:YES completion:nil]; 

} 

Я собирался опубликовать фотографии, но в настоящее время я не могу, потому что я новичок в переполнении стека. Любая помощь будет оценена по достоинству. Благодаря!

Итак, приложение не использует доски объявлений, но использует xib-файлы. Это унаследованный код, и приложение было создано несколько лет назад. Существует несколько контроллеров с несколькими видами. Существует центральный контроллер, в котором все остальные контроллеры представлений добавляются к центральному виду.

[self.view addSubview:_catViewController.tableView]; 
[self.view addSubview:_listViewController.tableView]; 
[self.view addSubview:_queryViewController.view]; 
[self.view bringSubviewToFront:_queryViewController.view]; 

queryViewController - это место, где я фотографирую. Когда я увольняю, всякая точка зрения исчезает, кроме контроллера вида запроса, который, как считается, занимает весь экран (раньше он этого не делал). Дайте мне знать, если мне нужно добавить дополнительную информацию! Спасибо

+0

Хм ... смотрит прямо на меня! Я бы не стал возиться с «removeFromSuperview» и т. Д. - так, что маршрут всегда кажется хуже! Можете ли вы описать свою структуру еще немного? У вас несколько контроллеров просмотра с несколькими видами? У вас есть переходы между ними? Раскадровка? Autolayout? –

+0

Я обновил свой вопрос! –

ответ

0

Таким образом, общая проблема заключается в том, что ваш центральный контроллер просмотра добавляет представлениям других контроллеров представления к себе. Вы не можете этого сделать - он прерывает инкапсуляцию контроллера. И когда вы нарушаете инкапсуляцию, вещи просто ломаются. (Это неопределенное утверждение, но на 100% верно: -p) К сожалению, вам нужно либо нанести удар в темноте, чтобы найти хак, чтобы заставить его работать, либо перераспределить проблему, чтобы уважать инкапсуляцию. Последнее, вероятно, лучше, если вам нужно будет поддерживать этот код в будущем.

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