我在支持 iPhone 和 iPad 的通用应用程序中工作。我目前使用 UIDocumentInteractionController 来呈现 PDF 并在该 PDF 上提供一些选项(最重要的是打印功能)。随着概述的出现和预览中的 RightBarButtonItem 正确允许我打印,一切似乎都可以在 iPad 上完美运行。但是,使用 iPhone 时,当我单击 RightBarButtonItem 时收到错误消息:
Presenting action sheet clipped by its superview. Some controls might not respond to touches. On iPhone try -[UIActionSheet showFromTabBar:] or -[UIActionSheet showFromToolbar:] instead of -[UIActionSheet showInView:].
使用典型的操作表解决此问题相对简单:
ActionSheet.ShowFromTabBar(this.TabBarController.TabBar);
ActionSheet.ShowFromToolbar(this.NavigationController.ToolBar);
然而,随着文档控制器的成熟,我发现很难掌握如何去做。与我在这里找到的其他实现相比,交互控制器的代码非常标准,所以我确信我缺少一些小东西。这是实现:
invoiceInteractionController = UIDocumentInteractionController.FromUrl(url);
invoiceInteractionController.Delegate = new UIDocumentInteractionControllerDelegateClass(this);
InvokeOnMainThread(delegate{
if (!DeviceHelper.IsIPhone())
invoiceInteractionController.PresentOptionsMenu(NavigationItem.RightBarButtonItem, true);
else {
invoiceInteractionController.PresentPreview(true);
}
});
现在,如果设备是 iPhone,我只是直接跳到预览,如您在此代码中所见。当按下右上角的条形按钮项时,问题出在预览控制器内,这会引发上述问题。但是,顺便说一句,将 PresentPreview() 替换为:
invoiceInteractionController.PresentOptionsMenu(new RectangleF(320,320,0,500), this.NavigationController.Toolbar, true);
这也会引起同样的错误。
我几乎想知道它是否与我的委托类有关,如下所示:
public class UIDocumentInteractionControllerDelegateClass : UIDocumentInteractionControllerDelegate
{
UIViewController viewC;
public UIDocumentInteractionControllerDelegateClass (UIViewController controller)
{
viewC = controller;
}
public override UIViewController ViewControllerForPreview (UIDocumentInteractionController controller)
{
return viewC;
}
public override UIView ViewForPreview (UIDocumentInteractionController controller)
{
return viewC.View;
}
public override RectangleF RectangleForPreview (UIDocumentInteractionController controller)
{
return viewC.View.Frame;
}
}
与往常一样,非常感谢任何帮助。