【问题标题】:Objective c How to return child view controller to presenting view controllerObjective c 如何将子视图控制器返回给呈现视图控制器
【发布时间】:2014-06-30 11:32:38
【问题描述】:

我有一个应用程序可以从框架中呈现视图控制器。在框架的视图控制器中,我在 loadView 中检查有效的许可证。如果许可证无效,则向 UI 返回回调以不加载视图。所以,现在我正在测试我的 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 的用户是否在没有有效许可的情况下尝试使用它。

【问题讨论】:

  • 我认为关闭视图控制器 loadView 是不可能的。为什么不在呈现视图控制器之前检查要求,这样如果不满足要求,就不会呈现新的视图控制器。
  • @insane-36 - 给我一个答案,我会给你功劳。提示:它以“i”开头。
  • 你的意思是重写 init 方法,然后在任何这种情况下为 self 返回 nil 吗?
  • @insane-36 - 给我一个答案,我会给你功劳。
  • 哈哈,现在真的很有趣。你是什​​么意思给出答案?我告诉了你我知道的一切,但是如果你能回答自己,那对你有好处。你自己得到一些点,我将能够学到新的东西:)

标签: objective-c sdk frameworks


【解决方案1】:

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

【讨论】:

  • 是的,您确实用一个问题(上图)回答了这个问题,“您的意思是覆盖 init 方法,然后在任何此类条件下为 self 返回 nil 吗?”。但这帮助我解决了问题。我最终在 initWithNibName 方法中抛出了一个 NSException 。如果我的 SDK 的用户不处理异常,他们的应用程序将会崩溃。什么是执行规则的方法!!!!
  • 我从没想过。
猜你喜欢
  • 1970-01-01
  • 2015-07-16
  • 2014-01-28
  • 2016-06-12
  • 1970-01-01
  • 1970-01-01
  • 2012-03-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多