目标c如何将子视图控制器返回到呈现视图控制器

时间:2014-05-12 23:00:35

标签: objective-c sdk frameworks

我有一个应用程序,它从框架中呈现一个视图控制器。在框架的视图控制器中,我在loadView中检查有效的许可证。如果许可证无效,则会向UI返回回调以不加载视图。所以,现在我正在测试我的SDK用户是否尝试不执行许可证检查。即使许可证无效,仍然会显示许可证。

我尝试了以下代码,但无论如何都会显示视图:

- (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 个答案:

答案 0 :(得分:1)

我认为在调用loadView方法时无法关闭任何视图控制器,您必须等到调用viewDidLoad然后将其解除或从parentViewController中删除它。但是,好的方法是事先决定是否提供这样的视图控制器。因此,如果您在呈现视图之前检查此人是否具有有效许可证,那就更好了。但是,如果你发现了什么,那我肯定会喜欢听到它。