2014-05-12 49 views
2

我有一個應用程序從框架呈現視圖控制器。在框架的視圖控制器中,我檢查loadView中的有效許可證。如果許可證無效,回調會返回給用戶界面以不加載視圖。所以,現在我正在測試我的SDK的用戶是否嘗試不執行許可證檢查。即使許可證無效,該維也會顯示。Objective c如何將子視圖控制器返回給呈現視圖控制器

我嘗試下面的代碼,但視圖獲取反正顯示:

- (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的用戶試圖使用它沒有一個有效的許可證。

+0

我不認爲這是可能的解僱視圖控制器loadView。爲什麼不在呈現視圖控制器之前檢查需求,以便如果不滿足需求,則不提供新的視圖控制器。 – Sandeep

+0

@瘋狂-36 - 給我一個答案,我會給你信貸。提示:它以「我」開頭。 – Patricia

+1

你的意思是重寫init方法,然後在任何這樣的條件下返回nil作爲自我? – Sandeep

回答

1

我認爲當已經調用loadView方法時,不可能關閉任何視圖控制器,您必須等到viewDidLoad被調用,然後解除它或從parentViewController中刪除它。然而,好的方法是事先決定是否呈現這樣的視圖控制器。因此,如果您在呈現視圖之前檢查該人是否擁有有效的許可證,那會更好。但是,如果你發現了什麼,那麼我一定會喜歡聽到它。

+1

是的,你真的用一個問題回答了這個問題(上面),「你的意思是重寫init方法,然後在任何這種情況下返回nil作爲自己嗎?」。但是這幫助我解決了這個問題。我最終在initWithNibName方法中拋出了一個NSException。如果我的SDK的用戶不處理異常,他們的應用程序將崩潰。什麼方式來執行規則! – Patricia

+0

我從來沒有這樣想過。 – Sandeep

相關問題