【问题标题】:calling unwind segue from camera method fails从相机方法调用 unwind segue 失败
【发布时间】:2014-07-29 23:07:15
【问题描述】:

我的 unwind segue 代码运行良好。我使用故事板来连接事情。当我运行该应用程序时,一切都很好。

但除了单击按钮之外,我还想从代码中展开。基本上,我展示了一个包含两个按钮的模式:CameraGallery。用户单击其中一个按钮以从相机或图库中获取图像。所以一旦获得图像,我就不再需要模态视图了。因此,作为 (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info 方法的最后一步,我将我的 unwind segue 称为

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {
  //... do work here and then
  [self performSegueWithIdentifier:@"myUnwindName" sender:self];
}

但是当我这样做时,我收到以下错误

attempt to dismiss modal view controller whose view does not currently appear. 
self = <UITabBarController: 0x127d09b80> modalViewController = <UIImagePickerController: 0x127e2fd80>

我理解这个问题。但我不知道如何解决它。

基本上,我不应该在“相机视图”仍在屏幕上时拨打电话(即我的模态还没有在屏幕上)。但是我在哪里打电话呢?有没有像ImagePickerDidClose 这样的东西或类似的东西?我找不到一个。非常感谢您的帮助。

【问题讨论】:

    标签: ios objective-c modal-dialog uiimagepickercontroller segue


    【解决方案1】:

    imagePickerController:didFinishPicking... 方法触发时,这是您关闭图像选择器控制器的机会:

    [picker dismissViewControllerAnimated:YES completion:nil];
    

    在大多数情况下,当我们调用这行代码时,我们会发送nil 作为完成参数。然而,如果我们想在这个解除完成时做一些事情(就像我们在这里做的那样),我们传递一个完成块参数:

    [picker dismissViewControllerAnimated:YES completion: ^{
        [self performSegueWithIdentifier:@"myUnwindName" sender:self];
    }];
    

    【讨论】:

    • 太棒了!!很简单。如此优雅!谢谢。检查和+1。 (在 6 分钟内 :))
    • 你可能想要一个不同的展开segue 只是为了这个没有动画的动作,以便动画从关闭图像选择器过渡到我们正在展开的控制器并且包含此代码的视图控制器不是'一瞬间没看到。同时,当图像选择器没有被关闭时,从这个控制器展开应该是动画的,等等。
    • 哇!我从来没有想到这一点。我不想打扰你太多,因为你已经让我很头疼,但你知道我该怎么做。我的意思是,在没有动画的情况下继续前进。我没有看到这样的设置。
    • 很好的答案。我投了赞成票。但是如果没有动画效果如何放松呢?
    • 我正在这样做,但在我的情况下它不起作用。我创建了一个new question 并将代码示例上传到 Github。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多