同时解除两个现有的ModalViewControllers(MPMediaPickerController和UIViewController)

时间:2014-03-21 11:22:50

标签: ios objective-c mpmediapickercontroller

我在解雇两个modalviewcontrollers时遇到了一个奇怪的问题。

我正在做的是我有一个viewControllers A和B.我在A上呈现modalviewController B.然后On BI在B.上呈现MPMediaPickerController现在我的问题是点击MPMediaPickerController中的Done按钮后它的委托方法是打电话。我已经实现了以下代码来关闭MPMediaPickerController和控制器B,以便我们可以直接转到控制器A.

- (void)mediaPicker:(MPMediaPickerController *)mediaPicker didPickMediaItems: (MPMediaItemCollection *) mediaItemCollection
{  
    [self.presentingViewController.presentingViewController dismissViewControllerAnimated:YES];
}

相同的代码适用于ViewControllers A,B和C,但如果第三个代码是MPMediaPickerController

则无效

任何想法或建议都非常有用。

3 个答案:

答案 0 :(得分:2)

为什么使用dismissModalViewControllerAnimated方法?它已弃用,请改用dismissViewControllerAnimated

检查此代码:

- (void)mediaPicker:(MPMediaPickerController *)mediaPicker didPickMediaItems: (MPMediaItemCollection *) mediaItemCollection
{ 
   [self dismissViewControllerAnimated:YES completion:^{
        [[self presentingViewController] dismissViewControllerAnimated:YES completion:nil];
    }];
}

答案 1 :(得分:1)

每当您从控制器呈现MPMediaPickerController时,您必须将其委托设置为呈现控制器。因为因为委托方法在呈现视图控制器内,所以你必须调用dismissModalViewControllerAnimated而不是你正在做的任何事情。我只是将bool参数传递给NO,因为每当你试图同时解除多个视图控制器时,iOS会有不平衡的转换调用,这可能会阻止另一个调用。所以我只是在没有任何动画的情况下解散了MPMediaPickerController,并且使用动画呈现了视图控制器。

- (void)mediaPicker:(MPMediaPickerController *)mediaPicker didPickMediaItems: (MPMediaItemCollection *) mediaItemCollection
{  
    [self dismissModalViewControllerAnimated:NO];
    [self.presentingViewController dismissModalViewControllerAnimated:YES];
}

答案 2 :(得分:0)

你试过以下代码吗?

- (void)mediaPicker:(MPMediaPickerController *)mediaPicker didPickMediaItems: (MPMediaItemCollection *) mediaItemCollection
{  
    [mediaPicker dismissModalViewControllerAnimated:NO];

    [self dismissModalViewControllerAnimated:YES]; 

}

谢谢!