Цель c Как вернуть контроллер дочернего представления в представление контроллера представления

У меня есть приложение, которое представляет контроллер представления из фреймворка. В контроллере представления структуры я проверяю действительную лицензию в loadView. Обратный вызов возвращается в пользовательский интерфейс, чтобы не загружать представление, если лицензия недействительна. Итак, теперь я тестирую, если пользователь моего SDK пытается не выполнить проверку лицензии. Несмотря на то, что лицензия недействительна, vie все еще отображается.

Я пробовал следующий код, но представление все равно отображается:

- (void)viewWillAppear:(BOOL)animated
{
 if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) {
 if (self.validLicense) {
 [self loadCameraPreview];
 } else {
 [self dismissViewControllerAnimated:YES completion:nil];
 }
 } else {
 IDLog(@"No Camera!");
 self.tapRecognizer.enabled = NO;
 }
}

Кто-нибудь знает, как я могу убить представление и не отобразить его? Это представление находится в SDK. Это не в приложении. С приведенным выше кодом приложение просто застревает на этой странице и не работает. Я думаю, все в порядке. Но я бы очень хотел, чтобы представленное представление выгрузилось.

Код презентации выглядит следующим образом:

if (bundle) {
 if (!self.cameraVC) {
 self.cameraVC =
 [[IDCameraViewController alloc] initWithNibName:@"IDCameraViewController"
 bundle:bundle];
 [self.cameraVC setOutImageBinarization:NO];
 [self.cameraVC setTapRecognizerEnabled:YES];
 [self.cameraVC setReturnType:BOTH];

 }
 UIView *cameraView = self.cameraVC.view;
 //if (self.validLicense) {
 [self.cameraVC setCaptureMode:self.mode];
 [self.cameraVC willMoveToParentViewController:self];
 [self addChildViewController:self.cameraVC];
 [self.view addSubview:cameraView];
 [self.cameraVC didMoveToParentViewController:self];
 //}

// if (self.validLicense == NO) {
// UIAlertView *alert =
// [[UIAlertView alloc] initWithTitle:@"License Activation"
// message:@"A valid license must be activated for this product."
// delegate:self
// cancelButtonTitle:@"OK"
// otherButtonTitles:nil];
// [alert show];
// }
}

Помните, я комментирую проверку, чтобы проверить, пытается ли пользователь моего SDK использовать его БЕЗ действующей лицензии.

1 ответ

Я думаю, что невозможно закрыть какой-либо контроллер представлений, когда метод loadView уже вызван, вам придется подождать, пока вызываемый viewDidLoad не будет вызван, а затем отклонит его или удалит из parentViewController. Однако хорошим способом будет заранее решить, следует ли представлять такой контроллер просмотра или нет. Таким образом, если вы проверите, что у человека есть действительная лицензия до представления представления, это будет намного лучше. Но, если вы что-то узнали, я бы с удовольствием это услышал.

licensed under cc by-sa 3.0 with attribution.