在iOS 7中退出UIDocumentInteractionController的PDF时出现黑屏

时间:2013-10-02 21:14:53

标签: c# ios xamarin.ios ios7

我正在使用Xamarin monotouch c#来显示PDF文档的iPhone应用程序。

我的问题是,在升级到iOS 7后退出UIDocumentInteractionController中的PDF时出现黑屏。

在源代码构造函数中,我创建了一个新的DocController:

this.DocumentPreview = new UIDocumentInteractionController();
this.DocumentPreview.Delegate = new DocumentInteractionDelegate(this.DidEndPreview);

当我选择一行时,我会得到PDF并显示它(正常工作):

public override void RowSelected(UITableView tableView, NSIndexPath indexPath)
{
    // Get PDF url from indexpath
    ...
    // Set url
    this.DocumentPreview.Url = url;
    this.DocumentPreview.PresentPreview(true);
    // Here i get a warning : Presenting view controllers on detached view controllers is discouraged
}

这是我的DocControllerDelegate类,在我的工作区中展示预览:

public class DocumentInteractionDelegate : UIDocumentInteractionControllerDelegate
{
    private Action DidEnd;

    public DocumentInteractionDelegate(Action didEnd)
    {
        this.DidEnd = didEnd;
    }

    public override UIViewController ViewControllerForPreview(UIDocumentInteractionController controller)
    {
        return AppDelegate.Instance.Workspace;
    }

    public override void DidEndPreview(UIDocumentInteractionController controller)
    {
        this.DidEnd.Execute();
    }
}

DidEnd动作并不重要,因为当动作触发时黑屏已经存在。

是的,我已经设置了根控制器:

this.MainWindow.RootViewController = this.MainViewController;

我不知道iOS6中是否有警告,但我可以从我的PDF中恢复正常并在我的表格中选择另一个以显示,现在在iOS7中,当点击完成时我得到黑屏在PDF中。

如何在没有黑屏的情况下返回我的控制器,iOS7中的哪些更改会影响此行为?

谢谢

修改

我已设法摆脱警告在工作区上不建议在分离的视图控制器上显示视图控制器:

this.MainViewController.AddChildViewController(this.Workspace); 

但是我在解除PDF时仍然会进入黑屏。

1 个答案:

答案 0 :(得分:1)

这就是我在UIDocumentInteractionControllerDelegate中调用的内容:

它将关闭该文档预览窗口,并允许您返回上一个视图控制器。

UIApplication.SharedApplication.Windows [0].RootViewController.DismissViewController (true,null);

尝试将Document Interaction Controller委托代码修改为:

public override UIViewController ViewControllerForPreview (UIDocumentInteractionController controller)
{

    return UIApplication.SharedApplication.Windows[0].RootViewController;
}